个人解读Activity之四-Part1
这一节,我们接着前面的介绍,讨论一下第五个议题,其实就是关于Android中的数据存储问题。我们先来看看有哪些常见的数据存储方式:文件存储、数据库存储这些都是比较常见的方式,在Android中也提供了这些存储方式。当然还有就像之前介绍的那样,主要包含两大类,一类是文档类的数据,主要是用文件或者数据库来存储,第二类就是配置文件(例如日历视图的配置文件:周视图或者日视图等等)的存储,者在Android中使用的是Preference来实现的。当然,我们这里的存储不仅仅是通常理解的store的概念,还包括获取这些数据,对数据进行一些操作等等。还有一点的就是Android中各个进程是相互独立的,这就涉及到数据共享问题,例如:联系人这些数据被很多应用共享,电话、短信等等!那Android是怎么实现多个进程之间共享数据的呢?这就是Android四大组件之一的Content Provider。所以,和这一节相关的内容比较多,我们分为以下3个part来记录!
part1:介绍Preference存储;
part2:介绍SQLite和File存储;
part3:介绍Content Provider;
很自然,我们首先想到的就是获取SharedPreferences,然后在进行操作。主要使用如下两个接口:
现在思路比较清晰了,我们可以通过Context..getSharedPreferences(String name, int mode)方法来获取SharedPreferences接口然后再利用它内部的Editor接口对数据进行操作。
Context..getSharedPreferences(String name, int mode)方法的详细说明如下图:
第二个参数看上面的说明就一目了然了,就是操作模式,可读可写等四种类型。主要说一下第一个参数,Pregerences对数据的操作都是通过对一个XML文件进行操作,而XML文件里面的内容是以键值对的形式保存的,第一个参数就是这个XML文件的文件名。如果这个文件不存在,那么当你视图调用Editor这个接口去获取或者操作其中的元素的时候,这个文件就会被创建,接着会调用Editor接口的commit()方法对修改进行提交保存。 www.zzzyk.com
在官方文档中有一些代码片段对我们的思考起到非常重要的作用,这里将其摘录如下:
public class CalendarActivity extends Activity {
...
static final int DAY_VIEW_MODE = 0;
static final int WEEK_VIEW_MODE = 1;
private SharedPreferences mPrefs;
private int mCurViewMode;
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
SharedPreferences mPrefs = getSharedPreferences();
mCurViewMode = mPrefs.getInt("view_mode", DAY_VIEW_MODE);
}
protected void onPause() {
super.onPause();
SharedPreferences.Editor ed = mPrefs.edit();
ed.putInt("view_mode", mCurViewMode);
ed.commit();
}
}
public class CalendarActivity extends Activity {
...
static final int DAY_VIEW_MODE = 0;
static final int WEEK_VIEW_MODE = 1;
private SharedPreferences mPrefs;
private int mCurViewMode;
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
SharedPreferences mPrefs = getSharedPreferences();
mCurViewMode = mPrefs.getInt("view_mode", DAY_VIEW_MODE);
}
protected void onPause() {
super.onPause();
SharedPreferences.Editor ed = mPrefs.edit();
ed.putInt("view_mode", mCurViewMode);
ed.commit();
}
}以上这段代码首先获取SharedPreferences接口,然后获取view_mode域的值。最后在此Activity处于暂停状态的时候,调用Editor接口中的putInt()方法保存view_mode域的值,这样就能避免当Activity不处于与运行状态时数据会丢失的现象。
这里,我们也用一个简单的例子来测试一下自己的想法:在Activity上显示一个文本编辑框,用户可以在里面输入文本,当退出这个activity再次进入这个activity时数据仍然能出现在此activity上面!
第一步:创建一个新的工程,Preferences;
第二步:修改布局文件,在上面放置一个文本编辑框EditText组件;
第三步:修改java源文件,添加一些代码,和上面的示例代码类似,如下:
private EditText editText;
private static final String TEST = "test";
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
editText = (EditText)findViewById(R.id.EditText01);
SharedPreferences pre = this.getSharedPreferences(TEST, MODE_WORLD_READABLE);
editText.setText(pre.getString("text", ""));
}
@Override
public void onStop(){
super.onStop();
SharedPreferences.Editor editor = this.getSharedPreferences(TEST, MODE_WORLD_READABLE).edit();
editor.putString("text", editText.getText().toString());
editor.commit();
}
private EditText editText;
private static final String TEST = "test";
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
editText = (EditText)findViewById(R.id.EditText01);
SharedPreferences pre = this.getSharedPreferences(TEST, MODE_WORLD_READABLE);
editText.setText(pre.getString("text", ""));
}
@Override
public void onStop(){
super.onStop();
SharedPreferences.Editor editor = this.getSharedPreferences(TEST, MODE_WORLD_READABLE).edit();
editor.putString("text", editText.getText().toString());
editor.commit();
}代码和上面的示例代码几乎一样,就不进行解释了!
第四步:看一下运行效果,
补充:移动开发 , Android ,