Android共享数据ContentProvider的使用
ContentProvider数据共享
1.首先在AndroidManifest.xml文件中添加对外暴露的数据共享接口Content
?ContentProvider采用了authorities(主机名/域名)对它进行唯一标识,authorities 就是他的域名
?
2.Url解析
content://com.yaku.ContentProvider.userprovider/user/2
【content://】 Android定义的内容提供都的Schema
【com.yaku.ContentProvider.userprovider】? 主机名或者authorities
【user】? 路径
【2】 ID?
示例代码:
数据结构User.java:
?
数据库操作DBOpenHelper.java:
?
单元测试类(在另一个应用中):
?
package com.yaku.ContentProvider;import android.content.ContentResolver;import android.content.ContentValues;import android.database.Cursor;import android.net.Uri;import android.test.AndroidTestCase;import android.util.Log;/** * 监听数据变化 */public class OtherContentProviderTest extends AndroidTestCase {private static final String TAG = "OtherContentProvider"; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); Uri insertUri = Uri.parse("content://com.yaku.ContentProvider.userprovider/user"); ContentResolver contentResolver = this.getContentResolver(); //对指定uri进行监听,如果该uri代表的数据发生变化,就会调用PersonObserver中的onChange() contentResolver.registerContentObserver(insertUri, true, new PersonObserver(new Handler())); } private final class PersonObserver extends ContentObserver{public PersonObserver(Handler handler) {super(handler);}@Overridepublic void onChange(boolean selfChange) {ContentResolver contentResolver = getContentResolver();Uri selectUri = Uri.parse("content://com.yaku.ContentProvider.userprovider/user");Cursor cursor = contentResolver.query(selectUri, null, null, null, "userid desc");while(cursor.moveToNext()){int id = cursor.getInt(cursor.getColumnIndex("userid"));String name = cursor.getString(cursor.getColumnIndex("name"));int age = cursor.getInt(cursor.getColumnIndex("age"));Log.i(TAG, "id="+ id + ",name="+ name+ ",age="+ age);}} }}?