提供數據的項目:A
獲取數據的項目:B
1.先在A項目里建一個類MyContentPRoviser,繼承ContentProvider,并重新方法
2.需要在清單文件里面配置,authoritiies相當于地址,name是類的名字,exported為是否開放
<!--配置內容提供者--><provider android:authorities="com.zking.a24provider.PERSON" android:name=".MyContentProvider" android:exported="true"></provider>3.在B項目中,獲取內容訪問者ContentResolver,這樣通過Uri得到A項目清單文件里的提供者的地址authoritiie,Uri中需要添加協議content://+地址,這樣簡單幾步就可以獲取到A項目中MyContentProviser里的方法了。ContentResolver cr= getContentResolver();Uri uri=Uri.parse("content://com.zking.a24provider.PERSON");//通過Uri進行查詢,返回一個Cursorcr.query(uri, String[] projection, String selection, String[] selectionArgs,String sortOrder)//將一組數據插入到Uri 指定的地方cr.insert(uri, ContentValues values)//更新Uri指定位置的數據cr.update(uri, ContentValues values, String where, String[] selectionArgs)//刪除指定Uri并且符合一定條件的數據cr.delete(uri, String where, String[] selectionArgs)4.這里重要的一點是URI,Uri代表了要操作的數據,Uri主要包含了兩部分信息①需要操作的ContentProvider ②對ContentProvider中的什么數據進行操作例如:查詢所有 content://com.zking.a24provider.PERSON/student查詢id=1的 content://com.zking.a24provider.PERSON/student/1所以在提供數據的項目A中需要用uriMatcher添加規則,用于匹配Uri①把需要匹配Uri路徑全部給注冊上 // 常量UriMatcher.NO_MATCH表示不匹配任何路徑的返回碼(-1)。 UriMatcher uriMatcher = new UriMatcher(UriMatcher.NO_MATCH); // 若match()方法匹配content://com.zking.a24provider.PERSON/student路徑則返回匹配碼為1 uriMatcher.addURI("com.zking.a24provider.PERSON","student",1); // 若match()方法匹配content://com.zking.a24provider.PERSON/student/1路徑則返回匹配碼為2 uriMatcher.addURI("com.zking.a24provider.PERSON","student/#",2); ②注冊完需要匹配的Uri后,就可以使用uriMatcher.match(uri)方法對輸入的Uri進行匹配5.實例代碼A項目 MyContentProvider類package com.zking.a24provider;import android.content.ContentProvider;import android.content.ContentUris;import android.content.ContentValues;import android.content.UriMatcher;import android.database.Cursor;import android.database.sqlite.SQLiteDatabase;import android.net.Uri;import android.support.annotation.Nullable;import android.util.Log;import util.DbUtil;/** * Created by Administrator on 2017/2/7. */public class MyContentProvider extends ContentProvider { private SQLiteDatabase sqLiteDatabase; private UriMatcher uriMatcher; @Override public boolean onCreate() { Log.i("text","onCreat"); DbUtil dbUtil = new DbUtil(getContext(), "dataa.db", null, 2); sqLiteDatabase = dbUtil.getReadableDatabase(); //實例化URI匹配器 uriMatcher = new UriMatcher(UriMatcher.NO_MATCH); //添加規則 //1.查所有 uriMatcher.addURI("com.zking.a24provider.PERSON","student",1); //2.查單個 /#查詢的條件,類似通配符 uriMatcher.addURI("com.zking.a24provider.PERSON","student/#",2); return false; } @Nullable @Override public Cursor query(Uri uri, String[] projection, String selection, String[] selectionArgs, String sortOrder) { Log.i("text","query"); //根據URI匹配器開始匹配 int code=uriMatcher.match(uri); switch (code){ case 1: //查詢所有 return sqLiteDatabase.query(false,"student",projection,selection,selectionArgs,null,null,sortOrder,null); case 2: //查詢單個 //獲取#號的值 long id= ContentUris.parseId(uri); return sqLiteDatabase.rawQuery("select * from student where _id=?",new String[]{""+id}); } //獲取數據庫中所有的數據 return sqLiteDatabase.query(false,"student",projection,selection,selectionArgs,null,null,sortOrder,null); } @Nullable @Override public String getType(Uri uri) { Log.i("text","getType"); return null; } @Nullable @Override public Uri insert(Uri uri, ContentValues values) { Log.i("text","insert"); return null; } @Override public int delete(Uri uri, String selection, String[] selectionArgs) { Log.i("text","delete"); return 0; } @Override public int update(Uri uri, ContentValues values, String selection, String[] selectionArgs) { Log.i("text","update"); return 0; }}B項目LAUNCHER Main2activitypackage com.zking.animation;import android.content.ContentResolver;import android.database.Cursor;import android.net.Uri;import android.support.v7.app.AppCompatActivity;import android.os.Bundle;import android.util.Log;import android.view.View;import android.widget.EditText;public class Main2Activity extends AppCompatActivity { private ContentResolver cr; private EditText mian2_id; private Uri uri; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main2); mian2_id = (EditText) findViewById(R.id.mian2_id); //獲取內容訪問者 cr = getContentResolver(); } public void getAllData(View view){ String id1=mian2_id.getText().toString(); //查詢單個 if("".equals(id1)){ uri = Uri.parse("content://com.zking.a24provider.PERSON/student/"+id1); }else{//查詢所有 uri = Uri.parse("content://com.zking.a24provider.PERSON/student"); } Cursor cursor= cr.query(uri,null,null,null,null); while (cursor.moveToNext()){ int id=cursor.getInt(cursor.getColumnIndex("_id")); String name=cursor.getString(cursor.getColumnIndex("name")); int age=cursor.getInt(cursor.getColumnIndex("age")); Log.i("test",id+" "+name+" "+age); } }}
新聞熱點
疑難解答