Android开发手记(16) 数据存储一 SharedPreferences

Android为数据存储提供了五种方式:

1、SharedPreferences

2、文件存储

3、SQLite数据库

4、ContentProvider

5、网络存储

  

  SharedPreferences是Android中最容易理解的数据存储技术,实际上SharedPreferences处理的就是一个key-value(键值对)SharedPreferences常用来存储一些轻量级的数据。这类似于C++中Map的数据存储方式(实际上在最后生成的.xml文件内,就是以Map格式存储的)。

  获取SharedPreferences的两种方式:

    1、调用Context对象的getSharedPreferences()方法

    2、调用Activity对象的getPreferences()方法

  两种方式的区别:

    调用Context对象的getSharedPreferences()方法获得的SharedPreferences对象可以被同一应用程序下的其他组件共享。

    调用Activity对象的getPreferences()方法获得的SharedPreferences对象只能在该Activity中使用。

  其中,getSharedPreferences()的方法原型为:

getSharedPreferences(String name, int mode);
// name: 生成xml文件的名称
// MODE_PRIVATE: 为默认操作模式,代表该文件是私有数据,只能被应用本身访问,在该模式下,写入的内容会覆盖原文件的内容 // MODE_APPEND: 模式会检查文件是否存在,存在就往文件追加内容,否则就创建新文件. // MODE_WORLD_READABLE: 表示当前文件可以被其他应用读取,不推荐使用 // MODE_WORLD_WRITEABLE: 表示当前文件可以被其他应用写入,不推荐使用

  使用SharedPreferences存储数据的方法如下:

//实例化SharedPreferences对象(第一步) 
SharedPreferences sp = getSharedPreferences("test", MODE_PRIVATE); 
//实例化SharedPreferences.Editor对象(第二步) 
SharedPreferences.Editor editor = mySharedPreferences.edit(); 
//用putString的方法保存数据 
editor.putString("UserName", etName.getText().toString());
editor.putString("Password", etPassword.getText().toString());
//提交当前数据 
//editor.apply();
editor.commit(); 
//使用toast信息提示框提示成功写入数据 
Toast.makeText(MainActivity.this, "注册成功", Toast.LENGTH_LONG).show();

  使用SharedPreferences读取数据的方法如下:

SharedPreferences sp = getSharedPreferences(strLogInfo, MODE_APPEND);
String name = sp.getString("UserName", "");
String passwd = sp.getString("Password","");
if(etName.getText().toString().equals(name) && etPassword.getText().toString().equals(passwd)){
        Toast.makeText(MainActivity.this, "登陆成功", Toast.LENGTH_LONG).show();
} else{
        Toast.makeText(MainActivity.this, "登录失败", Toast.LENGTH_LONG).show();
}

  在使用SharedPreferences之后,程序会在“/data/data/包名/shared_prefs/xxx.xml”生成的一个XML文件。文件名取决于getSharedPreferences的第一个参数名。

1 <?xml version='1.0' encoding='utf-8' standalone='yes' ?>
2 <map>
3     <string name="UserName">Name</string>
4     <string name="Password">Password</string>
5 </map>

  完整代码如下:

 1 import android.content.SharedPreferences;
 2 import android.support.v7.app.AppCompatActivity;
 3 import android.os.Bundle;
 4 import android.view.View;
 5 import android.widget.Button;
 6 import android.widget.EditText;
 7 import android.widget.Toast;
 8 
 9 public class MainActivity extends AppCompatActivity {
10 
11     private EditText etName;
12     private EditText etPassword;
13     private Button btnLogin;
14     private Button btnLogup;
15     private String strLogInfo = "test";
16 
17     @Override
18     protected void onCreate(Bundle savedInstanceState) {
19         super.onCreate(savedInstanceState);
20         setContentView(R.layout.activity_main);
21 
22         etName = (EditText)findViewById(R.id.etName);
23         etPassword = (EditText)findViewById(R.id.etPassword);
24         btnLogin = (Button)findViewById(R.id.btnLogin);
25         btnLogup = (Button)findViewById(R.id.btnLogup);
26 
27         btnLogup.setOnClickListener(new View.OnClickListener() {
28             @Override
29             public void onClick(View view) {
30                 SharedPreferences sp = getSharedPreferences(strLogInfo, MODE_APPEND);
31                 SharedPreferences.Editor editor = sp.edit();
32 
33                 editor.putString("UserName", etName.getText().toString());
34                 editor.putString("Password", etPassword.getText().toString());
35                 editor.commit();
36                 Toast.makeText(MainActivity.this, "注册成功", Toast.LENGTH_LONG).show();
37             }
38         });
39         btnLogin.setOnClickListener(new View.OnClickListener() {
40             @Override
41             public void onClick(View view) {
42                 SharedPreferences sp = getSharedPreferences(strLogInfo, MODE_APPEND);
43                 String name = sp.getString("UserName", "");
44                 String passwd = sp.getString("Password","");
45                 if(etName.getText().toString().equals(name) && etPassword.getText().toString().equals(passwd)){
46                     Toast.makeText(MainActivity.this, "登陆成功", Toast.LENGTH_LONG).show();
47                 } else{
48                     Toast.makeText(MainActivity.this, "登录失败", Toast.LENGTH_LONG).show();
49                 }
50             }
51         });
52 
53     }
54 }

 

posted @ 2015-10-28 21:27  doodle777  阅读(419)  评论(0编辑  收藏  举报