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

来源:互联网 发布:淘宝上下架规则和流量 编辑:程序博客网 时间:2024/05/17 23:22

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 singleContentResolver 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 viaSQLiteDatabase..

大概的意思就是说,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;@Overrideprotected 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;}}}}