读书人

利用Shared Preferences兑现用户本地登

发布时间: 2012-09-12 09:21:30 作者: rapoo

利用Shared Preferences实现用户本地登录

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

利用Shared Preferences兑现用户本地登录

这时我们可以设置用户名和密码。

然后,当我们下次在打开软件的时候,即出现下面登录的效果:

利用Shared Preferences兑现用户本地登录

点击确定之后我们就可以进入下一层显示。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>

读书人网 >移动开发

热点推荐