SharedPreferences
写入:
SharedPreferences可以存储一些简单的数据,数据存储在date——>data中对应的包中。
SharedPreferences是一个接口用getSharedPreferences(“preferenced_test”,MODE_PRIVATE)或getPreferences(MODE_PRIVATE)获得对应的实例。其中getSharedPreferences()的第一个参数为文件名,第二个为MODE。如果文件不存在就会创建。getPreferences()只有一个参数,文件名是默认的。
SharedPreferences的实例不能直接对文件写入数据,需要借助于SharedPreferences.Editor的实例。
而且这个实例必须写完数据必须提交。完整代码如下:
SharedPreferences preferences=getSharedPreferences("preferenced_test",MODE_PRIVATE);
// SharedPreferences preferences = getPreferences(MODE_PRIVATE);
SharedPreferences.Editor editor=preferences.edit();
editor.putString("test1",editText.getText().toString());
editor.commit();//editor必须要提交
结果如下:
如图所示在data——>data的对应的包中已经建立了这个叫pp的文件。将文件导出打开可知是我们所写入的值。
###写出
将文件中的数据读出可以直接用preferences.getString()而不需要借助于editor。完整代码如下:
SharedPreferences preferences =getSharedPreferences("preferenced_test",MODE_PRIVATE);//preferenced_test为文件名
// SharedPreferences preferences =getPreferences(MODE_PRIVATE);//有一个默认的文件名MainActivity
String content =preferences.getString("test1","我是默认值");//test1为键值,第二个值为默认值
textView.setText(content);
将结果显示在TextView中的:
可知结果是正确的。
SharedPreferences的完整的代码如下:
public class MainActivity extends Activity implements View.OnClickListener {
private Button button_writer;
private Button button_read;
private TextView textView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
button_read= (Button) findViewById(R.id.read_button);
button_writer= (Button) findViewById(R.id.writer_button);
textView = (TextView) findViewById(R.id.text);
button_writer.setOnClickListener(this);
button_read.setOnClickListener(this);
}
@Override
public void onClick(View v) {
switch (v.getId()){
case R.id.writer_button:
shared_writer();
break;
case R.id.read_button:
SharedPreferences preferences =getSharedPreferences("pp",MODE_PRIVATE);
String content=preferences.getString("key", "我是默认值");
textView.setText(content);
break;
default:
break;
}
}
private void shared_writer() {
SharedPreferences preferences =getSharedPreferences("pp",MODE_PRIVATE);
SharedPreferences.Editor editor =preferences.edit();
editor.putString("key","hello word");
editor.commit();
}
}
内部存储
内部存储分为两种:1)将数据存储在files文件夹中;2)将数据存储在cache(缓存)文件夹中。
一般我们将一些比较重要的数据存储在files文件夹中,在系统中不会被轻易的删除。对于一些不重要的文件我们存储在cache文件夹中,在系统内存不足的时候这些数据会被删除。这里如果存在缓存中的话可以存储在外部存储的缓存中,利用getCacheDir()可以获得内部存储的缓存目录,用getExternalCacheDir()获得外部存储的缓存目录。他们的共同点是在app被卸载后数据会同时消失。不会存在数据的残留。
将数据存储在files中
存入:
将数据写入files的方法非常简单只需要用openFileOutput(“file_test”,MODE_PRIVATE);//file_test为文件名。
获得输出流,然后再用输出流的方式写入数据就可以了。完整的代码如下:
FileOutputStream os = openFileOutput("file_test",MODE_PRIVATE);//file_test为文件名。
BufferedWriter writer =new BufferedWriter(new OutputStreamWriter(os));