近期做项目对ContentPrivoder的使用进行一个总结

ContentPrivoder官方解释:

Content providers are one of the primary building blocks of Android applications, providing content to applications. They encapsulate data and provide it to applications through the single ContentResolver interface. A content provider is only required if you need to share data between multiple applications. For example, the contacts data is used by multiple applications and must be stored in a content provider. If you don't need to share data amongst multiple applications you can use a database directly via SQLiteDatabase..

大概的意思就是说,ContentProvider是一个让你共享数据使用的。

下面谈谈 我的一些见见吧,有啥不对,望各位指出,在此感激不尽;


学习ContentProvider首先要知道Uri,在android中他是访问数据的方式之一,我们可以通过一个Uri地址指向一条数据,如:(我们要访问通讯录:Uri.parse("content://contacts/...."))

知道了这些,让我们来看看具体的实现吧;

1:为ContentProvider指定具体的操作实现类(这里我们一般使用数据库,其他的还是如网络,文件,内存 etc...),因为ContentProvider只是一个接口,没有具体的实现,实现需要我们操作;

2:实现具体的接口操作,比如:要访问哪一个Uri ,对于要对那些数据操作,怎么操作取决与你,如你不要需要删除数据  那么你就可以不用对delete相关的操作进行实现

实现:extends ContentProvider(继承ContentProvider)  然后就是实现,其中需要使用的那个Uri操作方法

<1  UriMatcher  匹配Uri地址  private static final UriMatcher MATCHER = new UriMatcher(UriMatcher.NO_MATCH);   //NO_MATCH  表示不

<2  ContextUtils.parseId();    解析一个Uri的Id     

<3  ContentUris.appendId;   向一个Uri中添加一个Id  

现在已经使用Contentprovider对数据库进行了实现了inset into 、 delete、update、query 然后就是使用了


3:在你需要访问数据的地方通过Contentprovider进行访问;

具体实现:getContentResolver进行操作


最好也是能否的数据访问的关键   需要在AndroidMinifest文件中进行getContentResolver的访问申请

如:<provider 
android:name="这里为你的ContentProvider的类名"
android:authorities="org.zhou.notes.cash"   //这里的org.zhou.notes.cash 表示你要访问的Uri地址   可以随便写
></provider>








最后贴上关键代码:

package org.zhou.ssc;

import android.app.Activity;
import android.app.AlertDialog;
import android.app.AlertDialog.Builder;
import android.content.Context;
import android.content.DialogInterface;
import android.content.SharedPreferences;
import android.content.SharedPreferences.Editor;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;

public class SharePreferencesActivity extends Activity {
	
	private EditText preferencesKey = null;
	private EditText preferencesValue = null;
	
	private Button buttonSave = null;
	private Button buttonLoad = null;
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.shareprefences);
		
		preferencesKey  = (EditText)findViewById(R.id.preferences_nameEditText);
		preferencesValue = (EditText)findViewById(R.id.preferences_valueEditText);
		
		buttonSave  = (Button)findViewById(R.id.preferences_saveButton);
		buttonLoad = (Button)findViewById(R.id.preferences_loadButton);
		//对事件进行处理
		buttonSave.setOnClickListener(new WidgetListener());
		buttonLoad.setOnClickListener(new WidgetListener());
	}
	
	//各个控件的监听对象
	class WidgetListener implements OnClickListener {
		public void onClick(View arg0) {
			switch (arg0.getId()) {
			case R.id.preferences_saveButton:
				//保存对象
				String key = preferencesKey.getText().toString();
				String value = preferencesValue.getText().toString();
				//得到SharedPreferences对象
				if(!("".equals(key) || "".equals(value))){//都不为空
					SharedPreferences sharedPreferences = getSharedPreferences("zhou", Context.MODE_WORLD_READABLE);
					Editor editor = sharedPreferences.edit();
					editor.putString(key, value);
					editor.commit();
				}else{
					String s = "";//这段程序很丑,暂时不修改
					if("".equals(key) && "".equals(value)){
						s = "参数名与参数值都不能为空";
					}else{
						if("".equals(key)){
							s = "参数名不能为空";
						}else if("".equals(value)){
							s = "参数值不能为空";
						}
					}
					
					//显示对话框出来
					Builder builder = new AlertDialog.Builder(SharePreferencesActivity.this);
					builder.setTitle("错误提示");
					builder.setMessage(s);
					builder.setIcon(R.drawable.qq2);
					//取消按钮
					builder.setNegativeButton("取消", new DialogInterface.OnClickListener() {
						public void onClick(DialogInterface dialog, int which) {
							dialog.cancel();
						}
					});
					//确定按钮
					builder.setPositiveButton("确定", new DialogInterface.OnClickListener() {
						public void onClick(DialogInterface dialog, int which) {
							dialog.dismiss();//让这个框消失就可以了
						}
					});
					builder.show();
				}
				break;
			case R.id.preferences_loadButton:
				//加载参数对象(如果这个zhou文件不存在系统就会为这个名字创建这个文件)
				SharedPreferences share = getSharedPreferences("zhou", Context.MODE_WORLD_READABLE);
				String shareKey = share.getString("name", "周利军");//第二个参数表示默认值
				//(当key不存在,进行添加,并使用这个默认值进行赋值)
				preferencesValue.setText(shareKey);
				break;
			}
		}
	}
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值