Android允许我们定义自己的的ContentProvider对象来共享数据,练练手,简单来实现一下。

要使用ContentProvider来操作数据,必须要有保存数据的场所。可以使用文件或SQLite数据库的方式来保存数据,通常使用SQLite数据库。

1,创建一个数据库帮助类,归根结底都是它在操作数据库。代码如下:

package com.njue;import android.content.Context;import android.database.sqlite.SQLiteDatabase;import android.database.sqlite.SQLiteDatabase.CursorFactory;import android.database.sqlite.SQLiteOpenHelper;public class DBManager extends SQLiteOpenHelper {public static final String myProvider_table_name="myProvider_table_name";String sql="create table myProvider_table_name(id integer,name text)";public DBManager(Context context) {super(context, "myPrivoder.db", null, 1);// TODO Auto-generated constructor stub}@Overridepublic void onCreate(SQLiteDatabase arg0) {// TODO Auto-generated method stub      arg0.execSQL(sql);}@Overridepublic void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {// TODO Auto-generated method stub}}


2,创建一个myProvider类,该类继承ContentProvider,实现其抽象方法来操作数据库,该类引用DBManager类来获得数据库实例。

package com.njue;import android.content.ContentProvider;import android.content.ContentValues;import android.database.Cursor;import android.database.sqlite.SQLiteDatabase;import android.net.Uri;public class myProvider extends ContentProvider {    DBManager dbHelper;@Overridepublic int delete(Uri arg0, String arg1, String[] arg2) {// TODO Auto-generated method stubSQLiteDatabase db=dbHelper.getWritableDatabase();int id=db.delete(DBManager.myProvider_table_name, arg1, arg2);if(id!=0)return id;return 0;}@Overridepublic String getType(Uri uri) {// TODO Auto-generated method stubreturn null;}@Overridepublic Uri insert(Uri uri, ContentValues values) {// TODO Auto-generated method stubSQLiteDatabase db=dbHelper.getWritableDatabase();db.insert(DBManager.myProvider_table_name, "id", values);return null;}@Overridepublic boolean onCreate() {// TODO Auto-generated method stubdbHelper=new DBManager(getContext());return true;}@Overridepublic Cursor query(Uri uri, String[] projection, String selection,String[] selectionArgs, String sortOrder) {// TODO Auto-generated method stubSQLiteDatabase db=dbHelper.getWritableDatabase();Cursor c=db.query(DBManager.myProvider_table_name,projection, selection, selectionArgs, null, null, sortOrder);return c;}@Overridepublic int update(Uri uri, ContentValues values, String selection,String[] selectionArgs) {// TODO Auto-generated method stubSQLiteDatabase db=dbHelper.getWritableDatabase();int id=db.update(DBManager.myProvider_table_name, values, selection, selectionArgs);if(id!=0)return id;return 0;}}


3,ContextProvider必须声明才能使用,因此,需要在AndroidManifest.xml配置文件中声明。声明很简单,需要类名称和授权名称两个属性。

 <provider android:name="myProvider"android:authorities="com.njue.myProvider" />


到这里,我们自定义的ContentProvider就完成了。我们可以在Eclipse中的File Explorer 窗口中看到自定义的ContentProvider

Android 自定义ContentProvider_第1张图片

4,简单测试

package com.njue;import android.app.Activity;import android.content.ContentResolver;import android.content.ContentValues;import android.database.Cursor;import android.net.Uri;import android.os.Bundle;import android.util.Log;import android.view.View;import android.widget.Button;import android.widget.EditText;import android.widget.TextView;public class Content_providerActivity extends Activity {    /** Called when the activity is first created. */ Uri uri; String AUTHORITY="content://com.njue.myProvider/myProvider_table_name"; ContentResolver cr; EditText input; Button insert; TextView show;    @Override    public void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);       setContentView(R.layout.main);       input=(EditText)findViewById(R.id.input);       insert=(Button)findViewById(R.id.insert);       show=(TextView)findViewById(R.id.show);        uri=uri.parse(AUTHORITY);        cr=this.getContentResolver();        insert.setOnClickListener(new Button.OnClickListener(){@Overridepublic void onClick(View v) {// TODO Auto-generated method stub ContentValues values=new ContentValues();        values.put("name", input.getText().toString());        cr.insert(uri, values);        Cursor c=cr.query(uri, null, null, null, null);        show.setText("");        c.moveToFirst();        while(c.moveToNext()){         show.append(c.getString(1)+"\r\n");        }        input.setText("");}});           }}


更多相关文章

  1. 开源项目之Android DataFramework(数据库框架)
  2. Java/Android 中使用Protocol Buffers传输数据
  3. Android studio查看SQLIte数据库文件
  4. Android 数据库事务的个人理解
  5. 使用openFileInput和openFileOutput实现Android平台的数据存储
  6. [转]SimpleCursorAdapter类与数据绑定

随机推荐

  1. Android(安卓)3.0 r1中文API文档(104) —
  2. 让android定时关机的实现方法
  3. Android(安卓)Android.mk 文件一点感悟
  4. Android四大组件之~~Service
  5. 安装Android(安卓)SDK和ADT步骤和遇到的
  6. Android使用ksoap2调用C#webservice体会
  7. Android(安卓)Wear 控件——WearableList
  8. 打不死的小强--双进程守护
  9. 自己祝贺一下访问量突破10000,发几个andro
  10. Android:使用SAX或者DOM或者pull操作XML文