最近恰好作了一个Android的登陆注册界面,将数据利用SharedPreferences或者SQLite绑定到Android程序中,实现简单的登录注册功能,本文未涉及到与服务器的交流。java
首先,对于登录注册要有一个明确的逻辑顺序,不论是对于SharedPreferences仍是SQLite,流程都是:注册---->检测是否重名---->注册成功---->登陆---->验证用户名与密码---->登陆成功。清楚了这个流程以后,就能够往下写了。这里为何要提到SharedPreferences和SQLite两种方式呢?或许会有人问道,SharedPreferences只能存储一些简单的数据保存在xml文件中,并且它的数据存储是覆盖式的(即存储一条数据会当即擦除覆盖上一条记录),可操做性比起SQLite要差不少,为何还要用这个呢?由于从实用角度来讲,若是一台设备或者仪器只须要给一个默认的登陆用户,那么这个时候彻底不须要写一个SQLite来进行存储,只要给一个默认的键值对来进行一次存储就能够了。可是若是须要实现多人注册功能,那么就须要SQLite来进行一些数据库的操做了。git
前面两步,咱们须要建立一个Registe_Activity,实现注册功能,效果以下:github
这一步是整个登录功能的核心,由于涉及到如何存储用户信息,涉及到数据库的增删改查功能,因此比较重要。sql
首先咱们来看利用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,让其实现自动增长的功能,在这里还须要注意的一点是注册时须要判断该用户名是否已经被使用,利用数据库的查询语句能够很方便的实现。.net
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,用来实现登陆界面,效果以下:code
这样一个登陆界面,主要实现的功能就是读取注册过得用户名——密码键值对,那么如何利用两种方式进行读取数据呢?xml
首先来看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.在登录成功后,自动获取登陆用户的信息,并显示到界面上
但愿对你们有所帮助。