android 数据存储Ⅰ
Published on 2016-04-03 14:55 in 暂未分类 with 无涯Ⅱ

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 @   无涯Ⅱ  阅读(340)  评论(0编辑  收藏  举报
    编辑推荐:
    · 如何编写易于单元测试的代码
    · 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
    · .NET Core 中如何实现缓存的预热?
    · 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
    · AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
    阅读排行:
    · 周边上新:园子的第一款马克杯温暖上架
    · Open-Sora 2.0 重磅开源!
    · 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
    · Ollama——大语言模型本地部署的极速利器
    · DeepSeek如何颠覆传统软件测试?测试工程师会被淘汰吗?
    点击右上角即可分享
    微信分享提示