利用Shared Preferences实现用户本地登录
Android中四种数据存储方式,Shared Preferences主要是以键值对的形式来存储数据,他仅仅是轻量级存储机制,主要实现android比较简单参数的设置。这里主要利用其中一种即Shared Preferenced来实现本地用户登录,下面是效果图:

这时我们可以设置用户名和密码。
然后,当我们下次在打开软件的时候,即出现下面登录的效果:

点击确定之后我们就可以进入下一层显示。Shared Preference主要是以getPreference()方法获取对象,然后再通过Editor来设置里面键值对形式的参数,最后再通过commit方法来提交保存这些数据,这些数据无法共享,即无法直接在多个程序间共享Preference数据。下面是上面效果的主要源码:
public class MainActivity extends Activity { privateAlertDialog setPrefernAlertDialog; private AlertDialog showPasswordDialog; private boolean isFirst; //保存数据 专用 private SharedPreferences sp; private EditText safenumber; private TelephonyManager tm; private Button start_button,modify_button; private boolean isStart; public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); sp=this.getSharedPreferences("data",MODE_WORLD_READABLE); //主要以键值对的形式取出 isFirst=sp.getBoolean("first", true); //若值没设置 则开始设置密码一类 if (isFirst) { showSetPasswordDialog(); return; }else { showInputPasswordDialog(); } } public void init() { setContentView(R.layout.activity_main); } //第一次使用 创建弹出输入密码对话框 属于dialog的基本操作 private void showSetPasswordDialog() { AlertDialog.Builder builder=new AlertDialog.Builder(this); //给Dialog设置View 从XML文件转换而来 这是属于基本操作 LayoutInflater inflater=LayoutInflater.from(this); View view=inflater.inflate(R.layout.show_password_dialog,null); final EditTextusername =(EditText)view.findViewById(R.id.username); final EditText userpassword=(EditText)view.findViewById(R.id.password); Button ok=(Button)view.findViewById(R.id.ok); Button cancle=(Button)view.findViewById(R.id.cancle); //设置动作 ok.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { // TODO Auto-generated method stub String name=username.getText().toString(); String password=userpassword.getText().toString(); //设置密码时 判断两者不能为空 if(name.trim().equals("") || password.trim().equals("")) { Toast.makeText(MainActivity.this, "用户名和密码不能为空", Toast.LENGTH_LONG).show(); return; } //sharedpreferences的基本操作 以键值对的形式保存到data文件中 Editor editor=sp.edit(); editor.putString("name",name); editor.putString("password",password); editor.putBoolean("first", false); //提交保存到生成的XML文件中 editor.commit(); setPrefernAlertDialog.dismiss(); init(); } }); cancle.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { // TODO Auto-generated method stub //这里注意要消去 对话框 再finish掉Activity 否则 有bug if (isFirst) { setPrefernAlertDialog.dismiss(); MainActivity.this.finish(); } setPrefernAlertDialog.dismiss(); } }); builder.setTitle("请设置密码"); builder.setView(view); setPrefernAlertDialog=builder.create(); setPrefernAlertDialog.show(); } /* * 当不是第一次操作,即已经设置完密码之后的操作 */ public void showInputPasswordDialog() { AlertDialog.Builder builder = new AlertDialog.Builder(this); LayoutInflater inflater = LayoutInflater.from(this); View view = inflater.inflate(R.layout.show_password_dialog, null); final EditText et_username = (EditText) view.findViewById(R.id.username); final EditText et_password = (EditText) view.findViewById(R.id.password); Button btn_ok = (Button) view.findViewById(R.id.ok); Button btn_cancle = (Button) view.findViewById(R.id.cancle); btn_ok.setOnClickListener(new OnClickListener() { public void onClick(View v) { String name = et_username.getText().toString(); String password = et_password.getText().toString(); if(name.trim().equals("") || password.trim().equals("")) { Toast.makeText(MainActivity.this, "用户名和密码不能为空", Toast.LENGTH_LONG).show(); return; } //获取保存文件中的用户名和密码 String savedUsername = sp.getString("name", ""); String savedPassword = sp.getString("password", ""); //查看输入的密码和名字是否一致 if(name.trim().equals(savedUsername) && password.trim().equals(savedPassword)) { init(); showPasswordDialog.dismiss(); } else { Toast.makeText(MainActivity.this, "用户名或者密码错误", Toast.LENGTH_LONG).show(); return; } }}); //下面属于基本的操作 btn_cancle.setOnClickListener(new OnClickListener() { public void onClick(View v) { showPasswordDialog.dismiss(); MainActivity.this.finish(); }}); builder.setTitle("输入密码"); builder.setView(view); showPasswordDialog = builder.create(); showPasswordDialog.show(); }}
上面最基本的一些含义已经注释了,记住一点就是这点:
//这里注意要先消去对话框 再finish掉Activity 否则 有bug
if (isFirst)
{ setPrefernAlertDialog.dismiss();
MainActivity.this.finish(); }
下面是show_password_dialog.xml:
<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent" > <EditText android:id="@+id/username" android:layout_width="fill_parent" android:layout_height="wrap_content" android:hint="请输入用户名 :" /> <EditText android:id="@+id/password" android:layout_width="fill_parent" android:layout_height="wrap_content" android:password="true" android:hint="请输入用户密码:" /><LinearLayout android:orientation="horizontal" android:layout_width="fill_parent" android:layout_height="wrap_content" > <Button android:id="@+id/ok" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@string/ok" android:layout_weight="1" android:textSize="20sp" android:textColor="@color/purple" /> <Button android:id="@+id/cancle" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@string/cancle" android:layout_weight="1" android:textSize="20sp" android:textColor="@color/purple" /></LinearLayout></LinearLayout>