Android数据存储之ContentProvider&Preferences

本文详细介绍了Android中ContentProvider的概念及其使用方法,包括如何通过ContentProvider实现应用间数据共享,以及如何管理和查询数据。此外,还讲解了Preferences的使用场景和存储方式。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

ContentProvider

四大组件之一,应用程序间唯一的共享数据途径.
功能:存储并检索数据(增删改查)及向其它应用程序提供访问数据的接口
系统提供内置的ContentProvider有(音频,图像,视频,手机通讯录等),这些都位于android.provider包下

让自己的程序和其它程序共享数据有两种方式:
1.创建自己的ContentProvider(及继承ContentProvider类).
2.将自己的数据添加到已有的ContentProvider中(需保证现有的ContentProvider跟自己的数据类型相同并且有对ContentProvider写入权限)

对于ContentProvider最重要的是数据模型和URI
1.数据模型(就是实体类)
2.URI(统一资源标示符)
每一个ContentProvider都对外提供一个公开的URI都以"Content://"开头
如果一个ContetnProvider管理多个数据集,将会为每一个数据集分配一个独立的URI

public class UIContentProviderActivity extends Activity { static final String[] Columns = new String[]{ Contacts._ID, Contacts.DISPLAY_NAME, }; TextView tv; /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); //本示例代码功能为显示联系人信息 tv =(TextView)findViewById(R.id.tv); String result = getQueryData(); tv.setText("ID\tName\t" + result); } private String getQueryData(){ String result =""; /* * 查询CotentProvider的方法有两个: * 1.通过获取ContentResolver对象的query() * 2.通过Activity的managedQuery() * 区别: * 返回的都是Cursor对象,managedQuery()是让Activity管理Cursor的生命周期. * Activity进入暂停状态调用deactivate()卸载,当Activity回到运行状态时调用requery()重新查询生成Cursor对象. * 第一个情况如果想让Activity管理Cursor的生命周期.加上startManagingCursor(cursor); */ ContentResolver resolver = getContentResolver(); Cursor cursor = resolver.query(Contacts.CONTENT_URI, Columns, null, null, null); //startManagingCursor(cursor); //Cursor c = managedQuery(Contacts.CONTENT_URI, Columns, null, null, null); cursor.moveToFirst(); while(!cursor.isAfterLast()){ String id = cursor.getString(cursor.getColumnIndex(Contacts._ID)); String name = cursor.getString(cursor.getColumnIndex(Contacts.DISPLAY_NAME)); result = result+ id+"\t"; result = result+ name+"\t\n"; cursor.moveToNext(); } cursor.close(); return result; } }



Preferences

程序内部轻量级的数据存储方案,主要用于存储和查询简单的数据类型(int,float,double,boolean,String等)
一般用来存储应用程序的设置信息,如应用程序的色彩方案,文字字体等.

存储方式:
1.每一个SharedPreferences对象,都保存在应用程序的私有文件夹下,
以一个SharedPreferences对象名称命名的XML文件,其键值对放在相应的标记中.
2.如果是调用Activity对象的getPreferences()的方式,文件名是该Activity的名称

public class UIPreferencesActivity extends Activity { public static final String EDIT_TEXT_KEY = "EDIT_TEXT"; EditText editText; SharedPreferences sharedPreferences; /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); //本示例代码功能为在编辑框输入文字后,切换至后台,然后在切换会本Activity编辑框输入的文字依然存在 editText = (EditText)findViewById(R.id.editText); /* * 获取Preferences对象的二种方式: * 1. 调用Context对象的getSharedPreferences(名称,打开模式)获得SharedPreferences对象 * 2. 调用Activity对象的getPreferences(打开模式)获得SharedPreferences对象 * * 区别: * 第一种方式获得的SharedPreferences对象可以被同一应用程序下其它组件共享 * 第二种方式获得的SharedPreferences对象只被调用该方法的Activity使用 */ sharedPreferences = getSharedPreferences(EDIT_TEXT_KEY, MODE_PRIVATE); //sharedPreferences = getPreferences(MODE_PRIVATE); String result = sharedPreferences.getString(EDIT_TEXT_KEY, null); if(result!=null){ editText.setText(result); } } @Override protected void onDestroy() { // TODO Auto-generated method stub SharedPreferences.Editor editor = sharedPreferences.edit(); editor.putString(EDIT_TEXT_KEY, editText.getText().toString()); editor.commit(); super.onDestroy(); } }


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值