提供数据的项目: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); } }}
新闻热点
疑难解答