Android中四种数据存储方式, Shared Preferences主要是以键值对的形式来存储数据,他仅仅是轻量级存储机制,主要实现android比较简单参数的设置。这里主要利用其中一种即Shared Preferenced来实现本地用户登录,下面是效果图:
这时我们可以设置用户名和密码。
然后,当我们下次在打开软件的时候,即出现下面登录的效果:
点击确定之后我们就可以进入下一层显示。Shared Preference主要是以getPreference()方法获取对象,然后再通过Editor来设置里面键值对形式的参数,最后再通过commit方法来提交保存这些数据,这些数据无法共享,即无法直接在多个程序间共享Preference数据。下面是上面效果的主要源码:
public class MainActivity extends Activity { private AlertDialog 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 EditText username =(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(); } }