天天看點

Android小白練習:登陸、注冊

前言:學生時代的練習,放出來見見太陽!!!

登入注冊(一)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 的真的是簡單,友善啊,都給寫完了!! 發現别人背景圖 挺好看的,拿來用了

Android小白練習:登陸、注冊
Android小白練習:登陸、注冊