最近剛好做了一個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.在登陸成功後,自動擷取登入使用者的資訊,并顯示到界面上
源碼下載下傳位址:http://download.csdn.net/detail/xiaoxun2802/9893567
希望對大家有所幫助,如有需要可加Q:2261886204聯系擷取。