标签:
当应用程序的数据需要被别的应用程序使用时,就必须将应用程序的数据抛出,通常要继承contentprovider类,并且覆写它的方法。下面通过将数据库的数据抛出例子学习一下:
1首先我们必须在应用程序的清单文件里配置provider:
<application android:allowBackup="true" android:icon="@drawable/ic_launcher" android:label="@string/app_name" android:theme="@style/AppTheme" > <uses-library android:name="android.test.runner" /> <activity android:name="com.example.database.MainActivity" android:label="@string/app_name" > <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> <provider android:name="com.mydatabase.provider.Personprovider" android:authorities="com.mydatabase.personprovider" > </provider> </application>
其中name属性是provider的包名下具体类名,authorities是主机名,是标识这个应用程序的provider的,通常以功能命名(没有具体规范),在uri的匹配时会用到(后面会讲到)。
2实现一个继承contentprovider的类,为了抛出数据和操作数据的方法,android提供了Urimather来实现uri的匹配。contentprovider抛出的数据在别的应用程序里利用contentresolver绑定这唯一的uri来对数据操作的:
public class Personprovider extends ContentProvider { public static final UriMatcher matcher =new UriMatcher(UriMatcher.NO_MATCH); Mydatebase dbhelper; public static final int ALL_PERSON=1; static { matcher.addURI("com.mydatabase.personprovider", "query", ALL_PERSON);//红色部分是主机名,后面的是路径 } @Override public boolean onCreate() { // TODO Auto-generated method stub dbhelper=new Mydatebase(getContext()); // SQLiteDatabase db=dbhelper.getReadableDatabase(); return false; } @Override public Cursor query(Uri uri, String[] projection, String selection, String[] selectionArgs, String sortOrder) { // TODO Auto-generated method stub int result=matcher.match(uri); Cursor cur=null; if(result==ALL_PERSON)//匹配成功时返回的是ALL_PERSON的值 { SQLiteDatabase db=dbhelper.getWritableDatabase(); cur=db.query("person", projection, selection, selectionArgs, null, null, null); return cur; } else { throw new IllegalArgumentException("无法找到匹配对象!"); } }
3、在别的应用里只需要获取contentresolver,然后带入相应的uri来对数据进行操作:(下面代码是通过一个button按钮获取数据库内person表的数据)
public void click(View View) { Uri uri=Uri.parse("content://com.mydatabase.personprovider/query"); ContentResolver rs=getContentResolver(); // rs.query(uri, null, selection, selectionArgs, sortOrder) Cursor cur=rs.query(uri, null, null, null, null); while(cur.moveToNext()) { System.out.println(cur.getString(0)); } }
标签:
原文地址:http://www.cnblogs.com/bokeofzp/p/4707573.html