使用ContentProvise获取APP中的数据

来源:互联网 发布:建筑外观上色软件 编辑:程序博客网 时间:2024/06/18 09:51

提供数据的项目: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进行查询,返回一个Cursor
cr.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  Main2activity
package 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);        }    }}





1 0
原创粉丝点击