前言:学生时代的练习,放出来见见太阳!!!
登录注册(一)sqlite
之前开发曾经用Sqlite 写过登陆注册 ,回顾一下
创建一个UserData
编写UserDataManager 通过sqllite 写数据库的一些基本操作管理数据 如插入、更新、删除 等等
在Loginactivity 里写一些 login 的函数 进行调用 只需要将参数传进去 调用函数方法 判断返回值结果
整体上 就是java 数据库的那一套逻辑 只是把数据库对象 换成了
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
public class UserDataManager {
//一些宏定义和声明
private static final String TAG = "UserDataManager";
private static final String DB_NAME = "user_data";
private static final String TABLE_NAME = "users";
public static final String ID = "_id";
public static final String USER_NAME = "user_name";
public static final String USER_PWD = "user_pwd";
private static final int DB_VERSION = 2;
private Context mContext = null;
//创建用户表
private static final String DB_CREATE = "CREATE TABLE " + TABLE_NAME + " ("
+ ID + " integer primary key," + USER_NAME + " varchar,"
+ USER_PWD + " varchar" + ");";
private SQLiteDatabase mSQLiteDatabase = null;
private DataBaseManagementHelper mDatabaseHelper = null;
//DataBaseManagementHelper继承自SQLiteOpenHelper
private static class DataBaseManagementHelper extends SQLiteOpenHelper {
DataBaseManagementHelper(Context context) {
super(context, DB_NAME, null, DB_VERSION);
}
@Override
public void onCreate(SQLiteDatabase db) {
Log.i(TAG,"db.getVersion()="+db.getVersion());
db.execSQL("DROP TABLE IF EXISTS " + TABLE_NAME + ";");
db.execSQL(DB_CREATE);
Log.i(TAG, "db.execSQL(DB_CREATE)");
Log.e(TAG, DB_CREATE);
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
Log.i(TAG, "DataBaseManagementHelper onUpgrade");
onCreate(db);
}
}
public UserDataManager(Context context) {
mContext = context;
Log.i(TAG, "UserDataManager construction!");
}
//打开数据库
public void openDataBase() throws SQLException {
mDatabaseHelper = new DataBaseManagementHelper(mContext);
mSQLiteDatabase = mDatabaseHelper.getWritableDatabase();
}
//关闭数据库
public void closeDataBase() throws SQLException {
mDatabaseHelper.close();
}
//添加新用户,即注册
public long insertUserData(UserData userData) {
String userName=userData.getUserName();
String userPwd=userData.getUserPwd();
ContentValues values = new ContentValues();
values.put(USER_NAME, userName);
values.put(USER_PWD, userPwd);
return mSQLiteDatabase.insert(TABLE_NAME, ID, values);
}
//更新用户信息,如修改密码
public boolean updateUserData(UserData userData) {
//int id = userData.getUserId();
String userName = userData.getUserName();
String userPwd = userData.getUserPwd();
ContentValues values = new ContentValues();
values.put(USER_NAME, userName);
values.put(USER_PWD, userPwd);
return mSQLiteDatabase.update(TABLE_NAME, values,null, null) > 0;
//return mSQLiteDatabase.update(TABLE_NAME, values, ID + "=" + id, null) > 0;
}
//
public Cursor fetchUserData(int id) throws SQLException {
Cursor mCursor = mSQLiteDatabase.query(false, TABLE_NAME, null, ID
+ "=" + id, null, null, null, null, null);
if (mCursor != null) {
mCursor.moveToFirst();
}
return mCursor;
}
//
public Cursor fetchAllUserDatas() {
return mSQLiteDatabase.query(TABLE_NAME, null, null, null, null, null,
null);
}
//根据id删除用户
public boolean deleteUserData(int id) {
return mSQLiteDatabase.delete(TABLE_NAME, ID + "=" + id, null) > 0;
}
//根据用户名注销
public boolean deleteUserDatabyname(String name) {
return mSQLiteDatabase.delete(TABLE_NAME, USER_NAME + "=" + name, null) > 0;
}
//删除所有用户
public boolean deleteAllUserDatas() {
return mSQLiteDatabase.delete(TABLE_NAME, null, null) > 0;
}
//
public String getStringByColumnName(String columnName, int id) {
Cursor mCursor = fetchUserData(id);
int columnIndex = mCursor.getColumnIndex(columnName);
String columnValue = mCursor.getString(columnIndex);
mCursor.close();
return columnValue;
}
//
public boolean updateUserDataById(String columnName, int id,
String columnValue) {
ContentValues values = new ContentValues();
values.put(columnName, columnValue);
return mSQLiteDatabase.update(TABLE_NAME, values, ID + "=" + id, null) > 0;
}
//根据用户名找用户,可以判断注册时用户名是否已经存在
public int findUserByName(String userName){
Log.i(TAG,"findUserByName , userName="+userName);
int result=0;
Cursor mCursor=mSQLiteDatabase.query(TABLE_NAME, null, USER_NAME+"="+userName, null, null, null, null);
if(mCursor!=null){
result=mCursor.getCount();
mCursor.close();
Log.i(TAG,"findUserByName , result="+result);
}
return result;
}
//根据用户名和密码找用户,用于登录
public int findUserByNameAndPwd(String userName,String pwd){
Log.i(TAG,"findUserByNameAndPwd");
int result=0;
Cursor mCursor=mSQLiteDatabase.query(TABLE_NAME, null, USER_NAME+"="+userName+" and "+USER_PWD+"="+pwd,
null, null, null, null);
if(mCursor!=null){
result=mCursor.getCount();
mCursor.close();
Log.i(TAG,"findUserByNameAndPwd , result="+result);
}
return result;
}
}
public void login() { //登录按钮监听事件
if (isUserNameAndPwdValid()) {
String userName = mAccount.getText().toString().trim(); //获取当前输入的用户名和密码信息
String userPwd = mPwd.getText().toString().trim();
SharedPreferences.Editor editor =login_sp.edit();
int result=mUserDataManager.findUserByNameAndPwd(userName, userPwd);
if(result==1){ //返回1说明用户名和密码均正确
//保存用户名和密码
editor.putString("USER_NAME", userName);
editor.putString("PASSWORD", userPwd);
//是否记住密码
if(mRememberCheck.isChecked()){
editor.putBoolean("mRememberCheck", true);
}else{
editor.putBoolean("mRememberCheck", false);
}
editor.commit();
Intent intent = new Intent(LoginActivity.this,MainActivity.class) ; //切换Login Activity至Main Activity
startActivity(intent);
finish();
Toast.makeText(this, getString(R.string.login_success),Toast.LENGTH_SHORT).show();//登录成功提示
}else if(result==0){
Toast.makeText(this, getString(R.string.login_fail),Toast.LENGTH_SHORT).show(); //登录失败提示
}
}
}
但是因为sqlite是Android 内置的的小型数据库,我决定将登陆、功能改为 用Bomb 后端云的方式 重新编写 整个数据的情况会更加明了,同时个人决定 为Android 端 搭建一个Java web 是管理员平台 ,这样公用一个云数据库 ,就可以轻松管理 用户以及其他数据源
这个就是为了学习理解sqlite 做练习学习用的 如果可以希望集成 GreenDao 这个开源框架,开发很方便。
详情见:https://greenrobot.org/greendao/
github: https://github.com/greenrobot/greenDAO
登录注册(二)Bomb
用Bomb后端云实现注册、登陆,真是非常容易 本来想用 手机验证的方式 做登陆的,鉴于学生 ,没有经费,不想买短信条,所以换成简单。我用的Android studio开发环境 Bomb 真是很好用,感激。
private void login() {
String uName=mAccount.getText().toString();
String uPwd=mPwd.getText().toString();
MyUser myUser=new MyUser();
myUser.setUsername(uName);
myUser.setPassword(uPwd);
myUser.login(new SaveListener<MyUser>() {
@Override
public void done(MyUser myUser, BmobException e) {
if(e==null){
Toast.makeText(LoginActivity.this, getString(R.string.login_success),Toast.LENGTH_SHORT).show();//登录成功提示
Intent intent = new Intent(LoginActivity.this,MainActivity.class) ; //切换Login Activity至Main Activity
startActivity(intent);
finish();
}else {
Toast.makeText(LoginActivity.this, getString(R.string.login_fail),Toast.LENGTH_SHORT).show(); //登录失败提示
}
}
});
}
private void userRegister() {
if (isUserNameAndPwdValid()) {
String userName = mAccount.getText().toString();
String userPwd = mPwd.getText().toString();
String userPwdCheck = mPwdCheck.getText().toString();
if(userPwd.equals(userPwdCheck)==false){ //两次密码输入不一样
Toast.makeText(this, getString(R.string.pwd_not_the_same),Toast.LENGTH_SHORT).show();
return ;
} else {
MyUser myUser=new MyUser();
myUser.setUsername(userName);
myUser.setPassword(userPwd);
myUser.signUp(new SaveListener<MyUser>() {
@Override
public void done(MyUser myUser, BmobException e) {
if (e==null){
Toast.makeText(RegisterActivity.this, getString(R.string.register_success),Toast.LENGTH_SHORT).show();
Intent intent_Register_to_Login = new Intent(RegisterActivity.this,LoginActivity.class) ; //切换User Activity至Login Activity
startActivity(intent_Register_to_Login);
finish();
}else {
Toast.makeText(RegisterActivity.this, getString(R.string.register_fail),Toast.LENGTH_SHORT).show();
}
}
});
}
}
}
相当于Sqlite 的真的是简单,方便啊,都给写完了!! 发现别人背景图 挺好看的,拿来用了