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();
}
}
上面最基本的一些含义已经注释了,记住一点就是这点:
//这里注意要先消去对话框 再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>