android存储之preference和SQLite

el/2024/7/17 22:33:24

android preference:

在android中,最简单的持久化数据的办法是使用Preferences API,获取preference对象有三种方式,都是通过Activity对象的方法,获取的是android.content.SharedPreferences对象实例。


getPreferences():获取到作用域是本Activity的preference

    public SharedPreferences getPreferences (int mode)

    通过Activity对象获取,获取的是本Activity私有的Preference,保存在系统中的xml形式的文件的

名称为这个Activity的名字因此一个Activity只能有一个,属于这个Activity

    此方法存储的数据只有本activity可以访问到。


getSharedPreferences():获取到作用域是本应用程序的preference

   public SharedPreferences getSharedPreferences (String name, int mode)

   通过Activity对象获取,但是属于整个应用程序,可以有多个,以第一参数的name为文件名保存在系统中。

此方法存储的数据本程序的所有activity都可以访问到。


示例:

以下示例让SharedPreferences保存用户选择的值:

 

 

涉及获取和保持preference值的代码在Actvity的onCreate方法代码中:

    preferences =this.getSharedPreferences(“sms.service.easymorse.com”, 0);isStart =preferences.getBoolean(“sms.service.is.start”, false);RadioGroup radioGroup = (RadioGroup) this.findViewById(R.id.radioGroup01);if (isStart) {radioGroup.check(R.id.radioButtonStart);} else {radioGroup.check(R.id.radioButtonStop);}radioGroup.setOnCheckedChangeListener(newOnCheckedChangeListener() {@Overridepublic void onCheckedChanged(RadioGroupgroup, int checkedId) {if (checkedId ==R.id.radioButtonStart) {isStart = true;Log.v(“sms.service”,“>>start service…”);} else {isStart = false;Log.v(“sms.service”,“>>stop service…”);}preferences.edit().putBoolean(“sms.service.is.start”, isStart).commit();}});

SharedPreferences实例是通过:

     get方法获取对应键的值;

     edit方法获取SharedPreferences.Editor对象

     通过SharedPreferences.Editor的put方法写入键值对

     保存需要commit方法


    getDefaultSharedPreferences():每个应用有一个默认的偏好文件preferences.xml,使用getDefaultSharedPreferences获取


getDefaultSharedPreferences和getSharedPreferences区别:

   自定义的一些偏好设置用getSharedPreferences来获取,例如定义一个loginpref.xml的偏好文件


使用

SharedPreferences sharedPreferences = getSharedPreferences("loginpref", Context.MODE_PRIVATE);
System.out.println("set_location = "+sharedPreferences.getBoolean("islogin", false));
Editor editor =  sharedPreferences.edit();
editor.putBoolean("islogin", false);
editor.commit();

来获取或者更改


每个应用有一个默认的偏好文件preferences.xml,使用getDefaultSharedPreferences获取

SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(this);
System.out.println("set_location = "+preferences.getoolean("if_set_location", false));
Editor editor = preferences.edit();
editor.putBoolean("if_set_location", false);
editor.commit();
"if_set_location"可能对应的是CheckBoxPreference或者其它,但是通用get***来获取值
<?xml version="1.0" encoding="utf-8"?>
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android"><PreferenceCategory android:title="位置信息设置"><CheckBoxPreferenceandroid:key="set_location"android:title="打开或关闭位置信息"android:summary="更改您的位置设置,打开或者关闭位置共享"android:defaultValue="true"/><Preferenceandroid:key="set_sys_location"android:title="系统位置功能设置"android:summary="点击到系统设置页面打开或关闭GPS位置功能"/>    </PreferenceCategory> 
</PreferenceScreen>


-----------------------------------------------------------------------

数据库:

写一个类继承自SQLiteOpenHelper,在该类中有如下两个抽象方法

SQLiteOpenHelper的子类必须实现这两个方法。
     public abstract void  onCreate(SQLiteDatabase db);
     public abstract void  onUpgrade(SQLiteDatabase db,intoldVersion,int newVersion);

  SQLiteOpenHelper会自动检测数据库文件是否存在。如果存在,会打开这个数据库,在这种情况下就不会调用onCreate()方法。如果数据库文件不存在,SQLiteOpenHelper首先会创建一个数据库文件,然后打开这个数据库,最后调用onCreate()方法。因此,onCreate()方法一般用来在新创建的数据库中建立表、视图等数据库组建。也就是说oncreate()方法在数据库文件第一次创建时调用。

先看看SQLiteOpenHelper类的构造方法再解释onUpdate()方法何时会被调用。

    public SQLiteOpenHelper(Context  context,Stringname,CursorFactoryfactory,intversion);

    其中name参数表示数据库文件名(不包括文件路径),SQLiteOpenHelper会根据这个文件名创建数据库文件。version表示数据库的版本号。如果当前传入的数据库版本号比上次创建或升级的版本号高,SQLiteOpenHelper就会调用onUpdate()方法。也就是说,当数据库第一次创建时会有一个初始的版本号。当需要对数据库中的表、视图等组建升级时可以增大版本号,再重新创建它们。


现在总结一下oncreate()和onUpgrade ()调用过程。

    1.如果数据库文件不存在,SQLiteOpenHelper在自动创建数据库后会调用oncreate()方法,在该方法中一般需要创建表、视图等组件。在创建前数据库一般是空的,因此不需要先删除数据库中相关的组件。

    2.如果数据库文件存在,并且当前版本号高于上次创建或升级的版本号,SQLiteOpenHelper会调用onUpdate()方法,调用该方法后会更新数据库的版本号。在onUpgrade ()方法中除了创建表、视图等组件外,还需要先删除这些相关的组件,因此,在调用onupdate()方法前,数据库是存在的,里面还原许多数据库组建。

     综合上述两点,可以得出一个结论。如果数据库文件不存在,只有oncreate()被调用(该方法在创建数据库时被调用一次)。如果数据库文件存在,会调用onUpgrade ()方法升级数据库,并更新版本号。

    调用SQLiteOpenHelper派生类对象的getWritableDatabasegetReadableDatabase

方法获得SQLiteDatabase 对象,然后使用SQLiteDatabase对象执行查询,插入等语句。

   调用SQLiteOpenHelper派生类对象的close方法关闭数据库连接


也可以不用SQLiteOpenHelper,直接创建或打开数据库:

  1.  SQLiteDatabase db = openOrCreateDatabase("test.db", Context.MODE_PRIVATE, null);  
  2.  db.execSQL(......)




http://www.ngui.cc/el/5557176.html

相关文章

Android Manifest.xml中application功能和重写

android:name属性是用来设置所有activity 属于哪个application的&#xff0c;默认是android.app.Application。 当然也可以自己定义一个类&#xff0c;例如&#xff1a; public class TestApplication extends Application {} 这个类的作用是为了放一些全局的和一些上下文都要用…

android 如何设置窗体特性getWindow().setFlags

//设置窗体全屏 getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN); //设置窗体始终点亮 getWindow().setFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON, WindowManager.LayoutParams.FLAG_KEEP_SCREEN…

Android Design Support Library 中控件的使用简单介绍(一)

介绍 在这个 Lib 中主要包含了 8 个新的 material design 组件&#xff01;最低支持 Android 2.1 。 这些组件在我看来就是对 Github中最近比较火的 android 组件进行了封装&#xff01;&#xff01; 使用 第一步--引用 引用这个库&#xff1a;在 build.gradle 文件中加上这段代…

Android 当overridePendingTransition遇见了Fragment

overridePendingTransition 在startActivity&#xff08;&#xff09;或finish&#xff08;&#xff09;后&#xff0c;调用overridePendingTransition &#xff08;R.anim.**in,R.anim.**out&#xff09;方法. 一)实现淡入淡出的效果如下: startActivity(new Intent(SplashAct…

JAVA HashMap的使用方法(例子)

1. HashMap 1) hashmap的数据结构 Hashmap是一个数组和链表的结合体&#xff08;在数据结构称“链表散列“&#xff09;&#xff0c;如下图示&#xff1a; 当我们往hashmap中put元素的时候&#xff0c;先根据key的hash值得到这个元素在数组中的位置&#xff08;即下标&#…

android startActivityForResult和setResult用法解析

startActivityForResult与startActivity的不同之处在于&#xff1a; 1、startActivity( ) 仅仅是跳转到目标页面&#xff0c;若是想跳回当前页面&#xff0c;则必须再使用一次startActivity( )。 2、startActivityForResult( ) 可以一次性完成这项任务&#xff0c;当程序执行…

linux定时运行命令脚本shell——crontab配置

Linux中&#xff0c;周期执行的任务一般由cron这个守护进程来处理 ps -ef | grep cron cron读取一个或多个配置文件&#xff0c;这些配置文件中包含了命令行及其调用时间。 cron的配置文件称为“crontab”&#xff0c;是“cron table”的简写。 一、 cron在3个地方查找配…

android开发之蜂鸣提示音和震动提示的实现原理与参考代码

蜂鸣提示音和震动提示此功能在手机使用中很实用&#xff0c;最近在读zxing项目&#xff0c;学到了不少东西;我们一起来看看他是怎么做的,感兴趣的朋友可以了解下哦 最近在读zxing项目&#xff0c;学到了不少东西。推荐大家也读读。里面有个 BeepManager 类&#xff0c;实现一个…

Android之DatePickerDialog用法(日历的用法)

该方法实现的调用系统Api&#xff0c;和android的版本&#xff0c;手机的牌子有关&#xff0c;实现不同的界面。不一定是入下图所示&#xff1a; 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 <?xml version"1.0" encoding&…

android 时间日期控件的使用(DatePicker、TimePicker、DatePickerDialog、TimePickerDialog、AnalogClock、DigitalClock)

在Android中&#xff0c;时间日期控件相对来说还是比较丰富的。其中&#xff0c;DatePicker用来实现日期输入设置&#xff0c;TimePicker用来实现时间输入设置。DatePickerDialog用来显示日期对话框&#xff0c;TimePickerDialog用来显示时间对话框。AnalogClock用来显示一个指…