Android数据存储之ContentProvider&Preferences

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、付费专栏及课程。

余额充值