实现记住用户名密码的登陆界面

一:当用户点击登录按钮时,如果用户勾选CheckBox密码复选框时,这些用户名与密码都被自动保存起来。

MainActivity的布局文件:

复制代码
 1 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
 2     xmlns:tools="http://schemas.android.com/tools"
 3     android:layout_width="match_parent"
 4     android:layout_height="match_parent"
 5     android:orientation="vertical"
 6     android:background="@drawable/loginbg"
 7     android:paddingBottom="@dimen/activity_vertical_margin"
 8     android:paddingLeft="@dimen/activity_horizontal_margin"
 9     android:paddingRight="@dimen/activity_horizontal_margin"
10     android:paddingTop="@dimen/activity_vertical_margin"
11     tools:context=".LoginActivity" >
12 
13   <include layout="@layout/login_top"/>
14  
15   <include layout="@layout/login_bottom"/>"
16 
17 </LinearLayout>
复制代码

二:当中调用其他两个xml文件,其代码就不显示了。

MainActivity的代码:

复制代码
  1 public class MainActivity extends Activity {
  2 
  3     private EditText uname;
  4     private EditText upass;
  5     private CheckBox cbkeep;
  6     private Button btlogin;
  7 
  8     private SharedPreferences mSpSettings=null;
  9     private static final String PREFS_NAME="NamePwd";
 10 
 11     @Override
 12     protected void onCreate(Bundle savedInstanceState) {
 13         super.onCreate(savedInstanceState);
 14         requestWindowFeature(Window.FEATURE_NO_TITLE);
 15         setContentView(R.layout.activity_main);
 16         findView();//得到布局中的控件
 17         setListener();//绑定控件事件
 18         getData();//获取数据
 19     }
 20 
 21     /*绑定控件*/
 22     private void findView() {
 23         uname=(EditText) findViewById(R.id.etUsername);
 24         upass=(EditText) findViewById(R.id.tvPassword);
 25         cbkeep=(CheckBox) findViewById(R.id.ckname);
 26         btlogin=(Button) findViewById(R.id.btnLogin);
 27     }
 28 
 29     /*为控件添加绑定事件*/
 30     private void setListener() {
 31         btlogin.setOnClickListener(new OnClickListener(){
 32 
 33             @Override
 34             public void onClick(View v) {
 35                 //判断用户名和密码
 36                 if("admin".equals(uname.getText().toString())&&"admin".equals(upass.getText().toString())){
 37                     //判断复选框是否选中
 38                     if(cbkeep.isChecked()){
 39                         mSpSettings=getSharedPreferences(PREFS_NAME, MODE_PRIVATE);
 40                         //得到Editor对象
 41                         Editor edit=mSpSettings.edit();
 42                         //记录保存标记
 43                         edit.putBoolean("isKeep",true);
 44                         //记录用户名
 45                         edit.putString("uname",uname.getText().toString());
 46                         //记录密码
 47                         edit.putString("upass",upass.getText().toString());
 48                         //提交数据
 49                         edit.commit();                        
 50                     }else{
 51                         mSpSettings=getSharedPreferences(PREFS_NAME, MODE_PRIVATE);
 52                         //得到Editor对象
 53                         Editor edit=mSpSettings.edit();
 54                         //记录保存标记
 55                         edit.putBoolean("isKeep",false);
 56                         //记录用户名
 57                         edit.putString("uname","");
 58                         //记录密码
 59                         edit.putString("upass","");
 60                         //提交数据
 61                         edit.commit();    
 62                     }
 63                     //跳转到首页
 64                     Intent intent=new Intent(MainActivity.this,SuccessActivity.class);
 65                     startActivity(intent);
 66                 }else{
 67                     //显示错误提示
 68                     Toast.makeText(getApplicationContext(), "用户名或密码错误", Toast.LENGTH_SHORT).show();
 69                 }
 70 
 71             }
 72 
 73 
 74         });
 75     }    
 76 
 77     protected void onResume(){
 78         //在界面显示数据之前得到之前存储的数据
 79         super.onResume();
 80         getData();
 81     }
 82 
 83     private void getData() {
 84         //得到sharedpreferences对象
 85         mSpSettings=getSharedPreferences(PREFS_NAME, MODE_PRIVATE);
 86         //判断是否之前存储过用户名密码
 87         if(mSpSettings.getBoolean("idKeep", false)){
 88             //如果之前存储过,则显示在相应文本框内
 89             uname.setText(mSpSettings.getString("uname", ""));
 90             upass.setText(mSpSettings.getString("upass", ""));
 91         }else{
 92             //否则显示为空
 93             uname.setText("");
 94             upass.setText("");
 95         }
 96 
 97     }
 98 
 99 
100 
101 }
复制代码

 

 三:当用户点击登录按钮时,首先判断用户名与密码是否为合法用户,如果是合法用户并且用户勾选了记住密码,则写入用户名密码信息。确定保存这些信息,如用户名密码输入错误,则清空之前记录的用户名密码。然后转到SuccessActivity页面。

SuccessActivity页面的布局文件如下:

复制代码
 1 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
 2     xmlns:tools="http://schemas.android.com/tools"
 3     android:id="@+id/RelativeLayout1"
 4     android:layout_width="match_parent"
 5     android:layout_height="match_parent"
 6     android:background="@drawable/loginbg"
 7     android:orientation="vertical"
 8     android:paddingBottom="@dimen/activity_vertical_margin"
 9     android:paddingLeft="@dimen/activity_horizontal_margin"
10     android:paddingRight="@dimen/activity_horizontal_margin"
11     android:paddingTop="@dimen/activity_vertical_margin"
12     tools:context=".MainActivity" >
13 
14     <TextView
15         android:id="@+id/textView1"
16         android:layout_width="wrap_content"
17         android:layout_height="wrap_content"
18         android:layout_centerInParent="true"
19         android:text="TextView"
20         android:textSize="20sp" />
21 
22 </RelativeLayout>
复制代码

 

SuccessActivity的代码:

复制代码
 1 package com.example.minitwittersimulate;
 2 
 3 import android.os.Bundle;
 4 import android.app.Activity;
 5 public class SuccessActivity extends Activity {
 6 
 7     
 8     @Override
 9     protected void onCreate(Bundle savedInstanceState) {
10         super.onCreate(savedInstanceState);
11         setContentView(R.layout.activity_success);
12     }
13 
14 
15 
16 }
复制代码

定义完SuccessActivity后,要在mainfest文件中注册Activity,否则打不开。

添加代码:<activity android:name=".SuccessActivity"></activity>

 

 

四:实际上SharedPreferences中的数据也是以文件的形式存储,只不过Android封装了这些文件的的过程和方式。可以在/data/data/PACKAGE_NAME/shared_prefs目录下查找,其中对应文件是使用xml来进行文件存储的,大致如下:

1 <?xml version='1.0' encoding='utf-8' standalone='yes'?>
2 <map>
3     <int name="isKeep" value="true">
4     <string name="uname" value="zhangsan">
5     <string name="upass" value="1234">
6 </map>
posted @ 2015-07-01 22:39  孙伟强  阅读(1829)  评论(0编辑  收藏  举报