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; } } } }