1. 程式人生 > >Android 實現簡單的登陸註冊功能(SharedPreferences和SQLite)

Android 實現簡單的登陸註冊功能(SharedPreferences和SQLite)

最近剛好做了一個Android的登入註冊介面,將資料利用SharedPreferences或者SQLite繫結到Android程式中,實現簡單的登陸註冊功能,本文未涉及到與伺服器的交流。

首先,對於登陸註冊要有一個明確的邏輯順序,不管是對於SharedPreferences還是SQLite,流程都是:註冊---->檢測是否重名---->註冊成功---->登入---->驗證使用者名稱與密碼---->登入成功。清楚了這個流程之後,就可以往下寫了。這裡為什麼要提到SharedPreferences和SQLite兩種方式呢?或許會有人問道,SharedPreferences只能儲存一些簡單的資料儲存在xml檔案中,而且它的資料儲存是覆蓋式的(即儲存一條資料會立即擦除覆蓋上一條記錄),可操作性比起SQLite要差很多,為什麼還要用這個呢?因為從實用角度來說,如果一臺裝置或者儀器只需要給一個預設的登入使用者,那麼這個時候完全不需要寫一個SQLite來進行儲存,只要給一個預設的鍵值對來進行一次儲存就可以了。但是如果需要實現多人註冊功能,那麼就需要SQLite來進行一些資料庫的操作了。

前面兩步,我們需要建立一個Registe_Activity,實現註冊功能,效果如下:


這一步是整個登陸功能的核心,因為涉及到如何儲存使用者資訊,涉及到資料庫的增刪改查功能,所以比較重要。

首先我們來看利用SharedPreferences來實現一次性儲存功能,程式碼如下:

private void saveUsersInfo() {
        SharedPreferences sharedPreferences = getSharedPreferences("UsersInfo", MODE_APPEND);
        SharedPreferences.Editor editor = sharedPreferences.edit();
        editor.putString("username", edit_register.getText().toString());
        //判斷註冊時的兩次密碼是否相同
        if (edit_setpassword.getText().toString().equals(edit_resetpassword.getText().toString())) {
            editor.putString("password", edit_setpassword.getText().toString());
        }
        editor.commit();
    }
首先建立一個UsersInfo.xml檔案,然後用鍵值對的形式來儲存資料,這個過程和Intent傳值類似。對於註冊時,這裡還加了一個“確認密碼”項,可以提供更好的使用者體驗。利用SharedPreferences進行儲存的時候,因為是一次性儲存,所以一旦註冊,就要講註冊功能遮蔽掉了,防止再次註冊修改使用者資訊。

接下來,我們用SQLite進行多人註冊功能的實現,這裡主要是一個增加資料的功能,先看程式碼:

private void registerUserInfo(String username, String userpassword) {
        SQLiteDatabase db = dbHelper.getWritableDatabase();
        ContentValues values = new ContentValues();
        values.put("username", username);
        values.put("password", userpassword);
        db.insert("usertable", null, values);
        db.close();
    }
其實,從程式碼來看,並不是很難理解,這裡也是通過鍵值對的形式來儲存使用者資訊的,但是在一開始建立資料庫和建立使用者表的時候,需要將id設定為autoincrement,讓其實現自動增加的功能,在這裡還需要注意的一點是註冊時需要判斷該使用者名稱是否已經被使用,利用資料庫的查詢語句可以很方便的實現。
public boolean CheckIsDataAlreadyInDBorNot(String value) {
        SQLiteDatabase db = dbHelper.getWritableDatabase();
        String Query = "Select * from usertable where username =?";
        Cursor cursor = db.rawQuery(Query, new String[]{value});
        if (cursor.getCount() > 0) {
            cursor.close();
            return true;
        }
        cursor.close();
        return false;
    }

接下來,我們需要建立一個Login_Activity,用來實現登入介面,效果如下:


這樣一個登入介面,主要實現的功能就是讀取註冊過得使用者名稱——密碼鍵值對,那麼如何利用兩種方式進行讀取資料呢?

首先來看SharedPreferences的讀取,這種讀取方式和Intent的傳值類似,程式碼也很簡單。

public void readUsersInfo(){
        SharedPreferences sharedPreferences = getSharedPreferences("UsersInfo",MODE_PRIVATE);
        account = sharedPreferences.getString("username","");
        password = sharedPreferences.getString("password","");
}
在註冊的時候,首先會建立一個UserInfo.xml檔案,然後以鍵值對的方式儲存使用者名稱和密碼,讀取就很簡單了。如果想要對使用者名稱和密碼進行驗證,也很簡單,只要獲取到兩個EditText的輸入值與讀取到的值進行比較即可。

對於SQLite的資料讀取,相對而言就要麻煩一些,同樣開始的時候,我們也需要檢索到這樣一對鍵值對,程式碼如下:

public boolean login(String username, String password) {
        SQLiteDatabase db = dbHelper.getWritableDatabase();
        String sql = "Select * from usertable where username=? and password=?";
        Cursor cursor = db.rawQuery(sql, new String[]{username, password});
        if (cursor.moveToFirst()) {
            cursor.close();
            return true;
        }
        return false;
    }
前提我們得獲取到之前建立的資料庫,然後利用Select語句進行檢索,其中傳入的username和password均為輸入的值,然後將這兩個值與資料庫中已有的值進行使用者驗證。註冊登入的本質就是對於一個數據的儲存與讀取,其主要內容就是操作資料,對於介面的優化,這個因人而異,只要實現了使用者功能即可。本例中對於使用者體驗方面,還有以下幾個小動作:

1.登陸介面的密碼是否可見

2.註冊時,使用者名稱字元的輸入限制,本例中允許的字元型別有字母、數字、漢字和下劃線_

3.對於密碼長度暫時沒有設定

4.在登陸成功後,自動獲取登入使用者的資訊,並顯示到介面上

希望對大家有所幫助。