Android 自訂ContentProvider

來源:互聯網
上載者:User

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

 

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("");}});           }}

 

 

 

 

 

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.