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 }
其中: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。
喜欢请赞赏一下啦^_^
微信赞赏
支付宝赞赏