ContentProvider的基本使用

ContentProvider:内容提供者。她主要完成这么一件事:共享数据。将一个应用的数据共享给其他应用

 

代码如下:

1、SQLiteProvider

 

[java][/java] view plaincopyprint?

  1. package com.njupt.practice_contentprovider1.provider;
  2. import com.njupt.practice_contentprovider1.dao.DBOpenHelper;
  3. import android.content.ContentProvider;
  4. import android.content.ContentUris;
  5. import android.content.ContentValues;
  6. import android.content.UriMatcher;
  7. import android.database.Cursor;
  8. import android.database.sqlite.SQLiteDatabase;
  9. import android.net.Uri;
  10. public class SQliteProvider extends ContentProvider{
  11.     private UriMatcher matcher = new UriMatcher(UriMatcher.NO_MATCH);
  12.     private DBOpenHelper helper;
  13.     public static final int PERSON = 1;
  14.     public static final int PERSON_ID = 2;
  15.     @Override
  16.     public boolean onCreate() {
  17.         helper = new DBOpenHelper(getContext());
  18.         matcher.addURI(“jd_love_ztmm”,”person”,PERSON);
  19.         matcher.addURI(“jd_love_ztmm”, “person/#”, PERSON_ID);
  20.         return true;
  21.     }
  22.     @Override
  23.     public Cursor query(Uri uri, String[] projection, String selection,
  24.             String[] selectionArgs, String sortOrder) {
  25.         SQLiteDatabase db = helper.getReadableDatabase();
  26.         switch(matcher.match(uri)){
  27.         case PERSON_ID:
  28.             long id = ContentUris.parseId(uri);
  29.             selection = selection == null ? “id = ” + id : selection + ” AND id = ” + id;
  30.         case PERSON:
  31.             return db.query(“person”, null, selection, selectionArgs, null, null, sortOrder);
  32.         default:
  33.             throw new RuntimeException(“Uri不能识别: ” + uri);
  34.         }
  35.     }
  36.     @Override
  37.     public Uri insert(Uri uri, ContentValues values) {
  38.         SQLiteDatabase db =  helper.getWritableDatabase();
  39.         switch(matcher.match(uri)){
  40.         case PERSON:
  41.             long id = db.insert(“person”, “id”, values);
  42.             return ContentUris.withAppendedId(uri, id);
  43.         default:
  44.             throw new RuntimeException(“Uri不能识别: ” + uri);
  45.         }
  46.     }
  47.     @Override
  48.     public int delete(Uri uri, String selection, String[] selectionArgs) {
  49.         SQLiteDatabase db = helper.getWritableDatabase();
  50.         switch(matcher.match(uri)){
  51.             case PERSON_ID:
  52.                 long id = ContentUris.parseId(uri);
  53.                 selection = selection == null ? “id = ” + id : selection + ” AND id = ” + id;
  54.             case PERSON:
  55.                 return db.delete(“person”, selection, selectionArgs);
  56.             default:
  57.                 throw new RuntimeException(“Uri不能识别: ” + uri);
  58.         }
  59.     }
  60.     @Override
  61.     public int update(Uri uri, ContentValues values, String selection,
  62.             String[] selectionArgs) {
  63.         SQLiteDatabase db = helper.getWritableDatabase();
  64.         switch(matcher.match(uri)){
  65.         case PERSON_ID:
  66.             long id = ContentUris.parseId(uri);
  67.             selection = selection == null ? “id = ” + id : selection + “AND id = ” + id;
  68.         case PERSON:
  69.             return db.update(“person”, values, selection, selectionArgs);
  70.         default:
  71.             throw new RuntimeException(“Uri不能识别: ” + uri);
  72.         }
  73.     }
  74.     @Override
  75.     public String getType(Uri uri) {
  76.         // TODO Auto-generated method stub
  77.         return null;
  78.     }
  79. }

 

2、ProviderTest

测试类

 

[java][/java] view plaincopyprint?

  1. package com.njupt.pc1;
  2. import android.content.ContentProvider;
  3. import android.content.ContentResolver;
  4. import android.content.ContentValues;
  5. import android.database.Cursor;
  6. import android.net.Uri;
  7. import android.test.AndroidTestCase;
  8. public class ProviderTest extends AndroidTestCase{
  9.     public void testQuery(){
  10.         ContentResolver resolver = getContext().getContentResolver();
  11.         Uri uri = Uri.parse(“content://jd_love_ztmm/person”);
  12.         Cursor c = resolver.query(uri,null,null,null,null);
  13.         while(c.moveToNext()){
  14.             Integer id = c.getInt(0);
  15.             String name = c.getString(1);
  16.             Integer balance = c.getInt(2);
  17.             System.out.println(new Person(id,name,balance));
  18.         }
  19.     }
  20.     public void testDelete(){
  21.        ContentResolver resolver =  getContext().getContentResolver();
  22.        Uri uri = Uri.parse(“content://jd_love_ztmm/person/1”);
  23.        resolver.delete(uri, null, null);
  24.     }
  25.     public void testUpdate(){
  26.         ContentResolver resolver = getContext().getContentResolver();
  27.         Uri uri = Uri.parse(“content://jd_love_ztmm/person/2”);
  28.         ContentValues values = new ContentValues();
  29.         values.put(“name”, “刘诗诗是java程序员的女神”);
  30.         values.put(“balance”, “65000”);
  31.         resolver.update(uri, values, null, null);
  32.     }
  33.     public void testInsert(){
  34.         ContentResolver resolver =  getContext().getContentResolver();
  35.         Uri uri = Uri.parse(“content://jd_love_ztmm/person”);
  36.         ContentValues values = new ContentValues();
  37.         values.put(“name”,”刘诗诗是C++程序员的女神” );
  38.         values.put(“balance”, “70000”);
  39.         resolver.insert(uri, values);
  40.     }
  41. }

 

3、DBTest

 

[java][/java] view plaincopyprint?

  1. package com.njupt.practice_contentprovider1.dao;
  2. import java.util.List;
  3. import java.util.Random;
  4. import com.njupt.practice_contentprovider1.domain.Person;
  5. import android.test.AndroidTestCase;
  6. public class DBTest extends AndroidTestCase {
  7.     public void testCreateDataBase() {
  8.         DBOpenHelper helper = new DBOpenHelper(getContext());
  9.         helper.getWritableDatabase();
  10.     }
  11.     public void testInsert() {
  12.         PersonDao dao = new PersonDao(getContext());
  13.         Person p = new Person(“我爱章泽天”, 55000);
  14.         dao.insert(p);
  15.     }
  16.     public void testDelete() {
  17.         PersonDao dao = new PersonDao(getContext());
  18.         dao.delete(104);
  19.     }
  20.     public void testUpdate() {
  21.         PersonDao dao = new PersonDao(getContext());
  22.         Person p = new Person(105, “章泽天爱我”, 46000);
  23.         dao.update(p);
  24.     }
  25.     public void testQuery() {
  26.         PersonDao dao = new PersonDao(getContext());
  27.         Person p = dao.query(105);
  28.         System.out.println(p);
  29.     }
  30.     public void testInsertMany() {
  31.         PersonDao dao = new PersonDao(getContext());
  32.         String strs[] = new String[]{“天天”,”章泽天”,”我爱天天”,”天天爱我”};
  33.         for(int i = 0 ; i < 100 ; ++i){
  34.             dao.insert(new Person(strs[new Random().nextInt(50) %4]+ i , new Random().nextInt(10000)));
  35.         }
  36.     }
  37.     public void testQueryAll(){
  38.         PersonDao dao = new PersonDao(getContext());
  39.         List<Person> persons = dao.queryAll();
  40.        for(Person p : persons){
  41.            System.out.println(p);
  42.        }
  43.     }
  44.     public void testQueryCount(){
  45.         PersonDao dao = new PersonDao(getContext());
  46.         System.out.println(dao.queryCount());
  47.     }
  48.     public void testQueryPage(){
  49.         PersonDao dao = new PersonDao(getContext());
  50.         List<Person> persons = dao.queryPage(2, 20);
  51.         for(Person p : persons){
  52.             System.out.println(p);
  53.         }
  54.     }
  55.     public void testRemit(){
  56.         PersonDao dao = new PersonDao(getContext());
  57.         dao.remit(4, 3, 3000);
  58.     }
  59. }

4、AndroidManifest.xml

 

在编写完ContentProvider的代码以后,别忘了在清单文件AndroidManifest.xml中进行注册

 

[html][/html] view plaincopyprint?

  1. <provider android:name=”com.njupt.practice_contentprovider1.provider.SQliteProvider”
  2.             android:authorities=”jd_love_ztmm”
  3.             android:exported=”true”/>

标签