Android--ContentProvider跨程式訪問資料

來源:互聯網
上載者:User

兩個程式A和B,A程式中有兩個類,一個繼承Activity,一個繼承ContentProviderB程式中有一個類,繼承 Activity 在A程式中建立一個資料庫,資料庫中建立兩張表,實現B程式訪問A程式資料庫中的資料 A程式中繼承Activity的類:建立資料庫,在資料庫中建立表,在表中插入資料 [html] package cn.mrzhu.test24;    import android.app.Activity;  import android.content.ContentValues;  import android.database.sqlite.SQLiteDatabase;  import android.os.Bundle;    public class Provider extends Activity {      /** Called when the activity is first created. */      @Override      public void onCreate(Bundle savedInstanceState) {          super.onCreate(savedInstanceState);          setContentView(R.layout.main);                    //建立資料庫          SQLiteDatabase db = openOrCreateDatabase("test24.db", MODE_PRIVATE, null);          //建立表          db.execSQL("create table test1 (_id integer, name varchar(20), age integer)");          db.execSQL("create table test2 (_id integer, name varchar(20), age integer)");                    //給test1表添加資料          ContentValues values = new ContentValues();          values.put("name", "zhangsan");          values.put("age", 30);          db.insert("test1", "name", values);                    values.clear();          values.put("name", "lisi");          values.put("age", 40);          db.insert("test1", "name", values);                    //給test2表添加資料          values.clear();          values.put("name", "Peter");          values.put("age", 20);          db.insert("test2", "name", values);                    values.clear();          values.put("name", "Mike");          values.put("age", 25);          db.insert("test2", "name", values);      }  }    A程式中繼承ContentProvider的類:需在AndroidManifest.xml中註冊[html]  <provider android:name="MyContentProvider"              android:authorities="cn.mrzhu.test24"></provider>    android:authorities="cn.mrzhu.test24"為程式B訪問提供uri,只有通過此uri程式B才能訪問到A程式中的資料 [html]  package cn.mrzhu.test24;    import android.content.ContentProvider;  import android.content.ContentValues;  import android.content.Context;  import android.content.UriMatcher;  import android.database.Cursor;  import android.database.sqlite.SQLiteDatabase;  import android.net.Uri;    public class MyContentProvider extends ContentProvider{        //Uri過濾器,通過此過濾器可以取出uri最後一個欄位      UriMatcher um;      static final String AUTHORITY = "cn.mrzhu.test24";      @Override      public int delete(Uri uri, String selection, String[] selectionArgs) {                    return 0;      }        @Override      public String getType(Uri uri) {          // TODO Auto-generated method stub          return null;      }        @Override      public Uri insert(Uri uri, ContentValues values) {          // TODO Auto-generated method stub          return null;      }        @Override      public boolean onCreate() {          //初始化過濾器          um = new UriMatcher(UriMatcher.NO_MATCH);          //添加過濾內容,從其他程式傳來的uri通過過濾器之後若其欄位為test1,則其code為1          um.addURI(AUTHORITY, "test1", 1);          um.addURI(AUTHORITY, "test2", 2);          return false;      }        @Override      public Cursor query(Uri uri, String[] projection, String selection,              String[] selectionArgs, String sortOrder) {          SQLiteDatabase db = getContext().openOrCreateDatabase("test24.db", Context.MODE_PRIVATE, null);          Cursor cs = null;          //將uri過濾,取得傳回值          int code = um.match(uri);          //根據不同的傳回值執行不同的查詢語句          switch(code){          case 1:              cs = db.rawQuery("select * from test1", null);              break;          case 2:              cs = db.rawQuery("select * from test2", null);              break;          }          //執行查詢語句後將結果集返回          return cs;      }        @Override      public int update(Uri uri, ContentValues values, String selection,              String[] selectionArgs) {          // TODO Auto-generated method stub          return 0;      }    }    B程式:通過A程式中繼承ContentProvider的類提供的uri訪問到A程式的資料 [html]  package cn.mrzhu.test24x;    import android.app.Activity;  import android.content.ContentResolver;  import android.database.Cursor;  import android.net.Uri;  import android.os.Bundle;  import android.util.Log;    public class Main extends Activity {      /** Called when the activity is first created. */      @Override      public void onCreate(Bundle savedInstanceState) {          super.onCreate(savedInstanceState);          setContentView(R.layout.main);                    //取得ContentResolver對象          ContentResolver cr = getContentResolver();          //指定uri並指定操作哪個表          Uri uri = Uri.parse("content://cn.mrzhu.test24/test1");          //執行query方法返回一個結果集          Cursor cs = cr.query(uri, null, null, null, null);          //遍曆結果集,取出資料          while(cs.moveToNext()){              Log.i("System.out", "_id" + cs.getInt(0) + "name" + cs.getString(1) + "age" + cs.getInt(2));          }      }  }      

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.