android 数据存储Ⅰ

本章讲述在Android开发中,简单的数据存储。涉及知识主要是SharedPreferences,及多页面切换ViewPager。

1.功能需求

做一个小应用、启动的时候有左右引导图、只有第一次启动时显示,看完以后,下一次启动就不会再显示了。

  • 做两个Activity展示引导,引导后进入主界面
  • 点击跳转下一页,主界面内容不限
  • 第二次启动时不再显示引导界面,直接跳转应用主界面

2.软件实现

                   图1

                     图2

                  图3

简要说明:运行软件,进入图1界面,若第一次使用,软件在运行2秒后,自动跳转到引导界面。通过滑动屏幕,可跳转到不同的引导界面。点击进入主页时,记录引导界面是否被显示的状态值,若不清空值时,下一次不会在出现引导界面。

3.相关知识

(1)sharedPreferences

sharedPreferences是数据持久化,就是把简单类型的数据(如:String,int)存储起来。对应复杂类型数据,一般是将数据转换成Base64编码,然后将转换后的数据以字符串的形式保存在 XML文件中,再用SharedPreferences保存。

SharedPreferences使用方法:

  •  使用Activity类的getSharedPreferences方法获得SharedPreferences对象,其中存储key-value的文件的名称由getSharedPreferences方法的第一个参数指定;
  • 使用SharedPreferences接口的edit获得SharedPreferences.Editor对象;
  • 通过SharedPreferences.Editor接口的putXxx方法保存key-value对。其中Xxx表示不同的数据类型。例如:字符串类型的value需要用putString方法;
  • 通过SharedPreferences.Editor接口的commit方法保存key-value对。commit方法相当于数据库事务中的提交(commit)操作。

commit与apply的区别:

  • apply没有返回值,而commit返回boolean表明修改是否提交成功
  • apply是将修改数据原子提交到内存, 而后异步真正提交到硬件磁盘, 而commit是同步的提交到硬件磁 盘,因此,在多个并发的提交commit的时候,他们会等待正在处理的commit保存到磁盘后在操作,从而降低了效率。而apply只是原子的提交到内 容,后面有调用apply的函数的将会直接覆盖前面的内存数据,这样从一定程度上提高了很多效率。 
  • apply方法不会提示任何失败的提示。 由于在一个进程中,sharedPreference是单实例,一般不会出现并发冲突,如果对提交的结果不关心的话,建议使用apply,当然需要确保提交成功且有后续操作的话,还是需要用commit的。

本例中存储是否显示引导页面的案例代码如下:

public class SessionData {
    public static final int VERSION = 1;        //1 不启动缓存
    public static SharedPreferences sp_version;   //保存
}

// 存入数据并提交
SessionData.sp_version.edit() .putInt("VERSION", SessionData.VERSION).commit();

// 读取SharedPreferences中需要的数据
SessionData. sp_version = getSharedPreferences("Y_Setting", Context.MODE_PRIVATE);

int version=SessionData.sp_version.getInt("VERSION", 0);

(2)ViewPager

android-support-v4.jar 是谷歌官方给我们提供的一个兼容低版本安卓设备的软件包,里面包囊了只有在安卓3.0以上可以使用 的api。而viewpager就是其中之一利用它,我们可以做很多事情,从最简单的导航,到页面菜单等等。那如何使用它呢,与ListView类似,我 们也需要一个适配器,他就是PagerAdapter。ViewPager类提供了多界面切换的新效果,新效果有如下特征:

  • 当前显示一组界面中的其中一个界面;
  • 当用户通过左右滑动界面时,当前的屏幕显示当前界面和下一个界面的一部分;
  • 滑动结束后,界面自动跳转到当前选择的界面中。

ViewPager在本例中使用的代码如下:

 1 package www.csnt.com.geekbandfivehomework;
 2 
 3 import android.app.Activity;
 4 import android.content.Intent;
 5 import android.os.Bundle;
 6 import android.support.v4.view.ViewPager;
 7 import android.support.v4.view.ViewPager.OnPageChangeListener;
 8 import android.view.LayoutInflater;
 9 import android.view.View;
10 import android.view.View.OnClickListener;
11 import android.widget.Button;
12 
13 import java.util.ArrayList;
14 
15 public class GuideActivity extends Activity implements OnPageChangeListener {
16     // 定义ViewPager对象
17     private ViewPager viewPager;
18     // 定义一个ArrayList来存放View
19     private ArrayList<View> views;
20     // 定义各个界面View对象
21     private View view1, view2, view3, view4;
22     // 定义开始按钮对象
23     private Button btnStart;
24 
25     @Override
26     protected void onCreate(Bundle savedInstanceState) {
27         super.onCreate(savedInstanceState);
28         setContentView(R.layout.activity_guide);
29         initView();
30 
31     }
32 
33     /**
34      * 初始化
35      */
36     private void initView() {
37         // 实例化ViewPager
38         viewPager = (ViewPager) findViewById(R.id.viewpager);
39 
40         // 实例化各个界面的布局对象
41         LayoutInflater mLi = LayoutInflater.from(this);
42         view1 = mLi.inflate(R.layout.guide_view1, null);
43         view2 = mLi.inflate(R.layout.guide_view2, null);
44         view3 = mLi.inflate(R.layout.guide_view3, null);
45 
46 
47         // 实例化ArrayList对象
48         views = new ArrayList<View>();
49         // 将要分页显示的View装入数组中
50         views.add(view1);
51         views.add(view2);
52         views.add(view3);
53 
54         // 设置监听
55         viewPager.setOnPageChangeListener(this);
56         // 设置适配器数据
57         viewPager.setAdapter(new ViewPagerAdapter(views));
58 
59         // 实例化开始按钮
60         btnStart = (Button) view3.findViewById(R.id.startBtn);
61         // 给开始按钮设置监听
62         btnStart.setOnClickListener(new OnClickListener() {
63             @Override
64             public void onClick(View v) {
65                 // 存入数据并提交
66                 SessionData.sp_version.edit()
67                         .putInt("VERSION", SessionData.VERSION).commit();
68                 startActivity(new Intent(GuideActivity.this, MainActivity.class));
69                 finish();
70             }
71 
72         });
73     }
74 
75     /**
76      * 滑动状态改变时调用
77      */
78     @Override
79     public void onPageScrollStateChanged(int arg0) {
80 
81     }
82 
83     /**
84      * 当前页面滑动时调用
85      */
86     @Override
87     public void onPageScrolled(int arg0, float arg1, int arg2) {
88 
89     }
90 
91     /**
92      * 新的页面被选中时调用
93      */
94     @Override
95     public void onPageSelected(int arg0) {
96     }
97 
98 }
ViewPager

其中:view3 = mLi.inflate(R.layout.guide_view3, null);表示其中一个界面加载到项目中。对于该界面中的其他控件,可通过如下方式使用:

      // 实例化开始按钮
        btnStart = (Button) view3.findViewById(R.id.startBtn);
        // 给开始按钮设置监听
        btnStart.setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View v) {
                // 存入数据并提交
                SessionData.sp_version.edit()
                        .putInt("VERSION", SessionData.VERSION).commit();
                startActivity(new Intent(GuideActivity.this, MainActivity.class));
                finish();
            }
        });

4.项目源代码下载

本项目源代码在360云盘上,开发环境为 Android Studio 2.0 beta 7。

https://yunpan.cn/cYamkZG3sq9jf  访问密码 f3d5。文件名称:android引导界面demo。

 

 

 

posted @ 2016-04-03 14:55  无涯Ⅱ  阅读(332)  评论(0编辑  收藏  举报