android的注册,登录的实现相关总结:

1,注册界面和登录界面应该提供互相跳转,

2,注册时,用户开始所输入内容应该都是必填信息,内容尽量简单,不要繁杂,其他不必要的信息可以在用户注册完成后,再填写;

3,注册完成后,用户可以自行填写其他的详细信息,所填条目最好是以用户定制的形式,这样使得用户更具有选择性和灵活性,而非所有用 户的详细信息内容都是被设定死了;

4,注册成功后,可以分配给用户一个默认头像,然后由用户自主选择是否上传头像;

5,上传头像功能,也即文件上传,可使用http协议进行上传且异步方式;

6,登录也应该尽量简单,为了使得用户体验更好,最好提供一个记住密码功能;

7,注册时候,先让用户在服务器端注册,服务器端注册失败则提示注册失败,否则,再在手机端数据库注册,若手机端注册失败,则也提示注册失败,反之提示注册成功,采取这样的机制,使得用户数据缓存到本地,登录时更快;

8,登录时,先在本地数据库(sqlite)验证用户身份,若验证失败,则在服务器端验证,这样身份验证的效率则更高一些。

9,登录成功后,可以将登录的用户信息保存在一个专门的类中,使得整个应用都能访问到,去掉了很多繁琐的传值操作。

10,下面说说我写的一个记住密码功能的一些实现要点:

(1)首先需要选择一种存储方式,用于存储记住的密码,用sqlite(数据库)或者文件形式;

(2)存储内容:id(自增长),用户名,用户密码,是否记住(状态标识,0表示不记住,1表示记住)

为什么要存储上述字段呢? 我们来看看流程,多个用户选择了记住密码,每个用户都登录成功了,这时将是否记住这个状态标识修改为1,下次再登录时,则首先我们需要记住最后一个登录的用户是谁,我们可以比较各个用户的登录时间来判断,但这样可能比较麻烦,这里我选择了一个自增长的字段id,id为Int,我们只要选择id最大且状态标识为1的那个用户即可并且设置记住密码的复选框为true,并将其用户名和密码自动填充编辑框(findMAX_sql = "SELECT * from login_user where id=" +
" (SELECT max(u.id) from " +
"(SELECT * from login_user where state='1') u" +
")";)。

(3)注意用户登录成功后,才会根据用户的选择来确定是否记住密码,即往数据库中插入信息。

(4)登录成功,存在4种情况:

<1>,记住密码为true,所填用户名和用户密码数据库中没有记录,则增加此条记录;

addlogin_sql = "insert into login_user(username,password,state) values(?,?,?)";

<2>记住密码为true,所填用户名和用户密码数据库中有记录,则修改此条记录,即记住这个状态标识修改为1;

updatelogin_sql = "update login_user set state=? where username=?";

<3>记住密码为false,所填用户名和用户密码数据库中有记录,则修改此条记录,即记住这个状态标识修改为0;

updatelogin_sql = "update login_user set state=? where username=?";

<4>最后一种情况则不做任何操作;

(5)记住密码复选框事件,根据所填用户名判断数据库是否有记录,若有,如果记住密码为true,则记住这个状态标识修改为1,反之为0;若没有,则不做任何操作

findlogin_sql = "select * from login_user where username=?";

(6)对EditText的监听

private EditText userNameLogin;
private EditText userPwdLogin;

class EditTextWatcher implements TextWatcher{


@Override
public void afterTextChanged(Editable arg0) {
// TODO Auto-generated method stub

}

@Override
public void beforeTextChanged(CharSequence s, int start, int count,
int after) {
// TODO Auto-generated method stub

}

@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
// TODO Auto-generated method stub
Map map = dBHelper.findLogin(s+"");
if(null != map) {
String pwd = (String)map.get("password");
String state = (String)map.get("state");
if(null != pwd && "1".equals(state)) {
userPwdLogin.setText(pwd);
}
}else {
userPwdLogin.setText("");
}
}
}

EditTextWatcher watcher = new EditTextWatcher();
userNameLogin.addTextChangedListener(watcher);

(7)启动界面,则取出最后一个登录用户的信息进行显示

db.execSQL
(

"create table "+USERSQLUtil.TABLE_NAME_LOGIN+
"(" +
"id INTEGER PRIMARY KEY autoincrement,username TEXT NOT NULL ,password TEXT NOT NULL,state TEXT" +
")"
);

public Map findLogin(String username) {
Cursor c = null;
String[] selectionArgs = null;
String sql = null;
SQLiteDatabase db = this.getWritableDatabase();

if(null != username) {
Log.i("user","findLogin");
sql = USERSQLUtil.findlogin_sql;
selectionArgs = new String[]{username};

}else {
sql = USERSQLUtil.findMAX_sql;
// selectionArgs = new String[]{};
}

c = db.rawQuery(sql, selectionArgs);
Map map = null;
if(c.moveToFirst()){
do{
map = new HashMap();
map.put("username", c.getString(1));
map.put("password", c.getString(2));
map.put("state", c.getString(3));
Log.i("userinfo",c.getString(1)+":"+c.getString(2)+":"+c.getString(3));
}while(c.moveToNext());
}
return map;
}


更多相关文章

  1. Android用户界面开发:事件处理
  2. #引用资源的两种方式 在java中R.string.app_name 在xml中@string
  3. 关于实现判断用户是在PC端和还是移动端访问。
  4. Android(安卓)API Guides---Best Practices for Web Apps
  5. 在用户组件中使用自定义标签
  6. 个推行业报告:安卓市场红米独占鳌头,浙江用户爱运动
  7. 走进Android(安卓)4.2背后强大的安全系统
  8. android app卸载以后弹出用户反馈界面
  9. 利用Android与iOS系统进行移动应用开发:浅析开发过程及人员招募

随机推荐

  1. Android(安卓)视图绑定,找不到类 'ResultP
  2. Android菜单应用(Menu)
  3. Android(安卓)如何使一个service 开机启
  4. android延迟进入主界面和点击按钮进入主
  5. Android应用程序使用Localsocket与Linux
  6. Android国际化
  7. 动态设置android:drawableLeft|Right|Top
  8. Activity切换导致的onCreate重复执行
  9. 基于Android客户端的人人网开放平台开发
  10. Android图片下载缓存库picasso解析