1.SharePreferences存储数据
用于存放一些类似登陆的配置信息,本质是一个xml文件,通过类似键值对的方式存储
- MODE_APPEND:追加方式存储
- MODE_PRIVATE:私有方式存储,其他应用无法访问(默认的操作模式)
- MODE_WORLD_READABLE:可被其他应用读取
- MODE_WORLD_WRITEABLE:可被其他应用写入
要想使用SharedPreference,首先要先获取它的对象,android提供了3类方法:
context类中的getSharedPreference()方法
这个方法接收两个参数,第一个用来指定SharePreference文件的名称。如果指定的文件不存在,则会创建一个,sharepreferences文件都是存放在/data/data/<package name>/shared_prefs/目录下的。第二个参数用于指定操作模式,目前只有MODE_PRIVATE是可选的,其他方式都被丢弃了。
Activity中的getPreferences()方法
这个方法和context类中的getSharedPreference()方法很相似,但是它只接受后面一个参数,他会自动将当前活动的类名作为SharePreference的文件名。
PreferenceManager类中的getDefaultSharedPreference()方法
这是一个静态方法,他接收一个Context参数,并自动使用当前应用程序的包名作为前缀来命名。得到SharePreferences对象之后,就可以向这个SharePreference文件中存储数据了
代码:
savebtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
SharedPreferences.Editor editor=getSharedPreferences("data",MODE_PRIVATE).edit();//获得editor对象
editor.putString("name","Tom");
editor.putInt("age",28);
editor.putBoolean("married",false);
editor.apply();//提交
}
});
好的,我遇到一个问题。。。。。data.xml文件没找到:
先mark一下,看下今晚能不能解决。
2.文件存储(内外部)
将数据存在文件中
这种存储不对存储的内容做任何格式化处理,所有数据都是原封不动保存在文件当中。
使用范围:简单的文本数据或者二进制数据
Context类中提供一个openFileoutput()的方法,接收两个参数,第一个参数是文件名,第二个参数是文件的操作模式。操作模式分为两种:MODE_PRIVATE是默认的操作模式,表示有相同文件名的时候,所写入的文件会覆盖源文件的内容;Mode_APPEND表示如果文件存在,则往文件追加内容,不存在则创建新文件。
其实就是用java的io流来进行操作,注意所有的文件都是默认存储到/data/data/<packagename>/files/目录下的。
上代码:
public void save() {
String data = "data to save";
FileOutputStream out = null;
BufferedWriter writer = null;
try {
out = openFileOutput("data", Context.MODE_PRIVATE);
writer = new BufferedWriter(new OutputStreamWriter(out));
writer.write(data);
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
if (writer != null) {
writer.close();
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
这是存储文件的方法。我用java 的IO流还不太熟悉,明天会继续补充这方面的博客
加入一个文本编辑框:
<EditText
android:id="@+id/edit"
android:hint="type somthing here!"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
public class MainActivity extends AppCompatActivity {
private EditText edittext;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
edittext=(EditText)findViewById(R.id.edit);
}
@Override
protected void onDestroy() {
super.onDestroy();
String input=edittext.getText().toString();
save(input);
}
public void save(String input) {
String data = input;
FileOutputStream out = null;
BufferedWriter writer = null;
try {
out = openFileOutput("data", Context.MODE_PRIVATE);
writer = new BufferedWriter(new OutputStreamWriter(out));
writer.write(data);
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
if (writer != null) {
writer.close();
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
当当!!开心~~成功!
从文件中读取数据:
Context类中提供了一个openFileInput()方法,用于从文件中读取数据,这个方法只接收一个参数,就是要读取的文件名,然后系统会自动到默认目录/data/data/<packagename>/files/去加载文件,并返回一个FileInputStream对象。
读取文件的代码:
public String load() {
FileInputStream in = null;
BufferedReader reader = null;
StringBuilder content = new StringBuilder();
try {
in = openFileInput("data");
reader = new BufferedReader(new InputStreamReader(in));
String line = "";
while ((line=reader.readLine())!=null) {
content.append(line);
}
} catch (IOException e) {
e.printStackTrace();
} finally {
if (reader != null) {
try {
reader.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
return content.toString();
}
调用load()方法:
String input=load();
if(!TextUtils.isEmpty(input)){
edittext.setText(input);
edittext.setSelection(input.length());//将光标移到文本末尾
Toast.makeText(this,"Success",Toast.LENGTH_LONG).show();;
}
3.SQLite数据库存储
4.ContentProvider存储数据