当前位置:操作系统 > 安卓/Android >>

个人解读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 ,
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,