使用内容提供者ContentProvider与内容访问者ContentResolver实现拿到另外一个项目的数据库数据

来源:互联网 发布:手机淘宝哪儿有一元抢 编辑:程序博客网 时间:2024/05/16 10:40

比如说你要拿手机电话本的电话号码,或者相册,等等存到数据库的东西,那么内容提供者ContentProvider与内容访问者ContentResolver便是最好的工具

下面就给大家上代码进行操作

第一步:

写一个Module,新建一个MyProvider.java文件,重写查询的方法,当然也可以去用增删改,这里我就只演示查了

public class MyProvider extends ContentProvider{    @Override    public boolean onCreate() {        return false;    }    @Nullable    @Override    public Cursor query(@NonNull Uri uri, @Nullable String[] projection, @Nullable String selection, @Nullable String[] selectionArgs, @Nullable String sortOrder) {       //获得数据库        DbHelper dbHelper=new DbHelper(getContext(),"G160628.db",null,3);        //调用写的database        //实际开发读写都可以用        SQLiteDatabase sqLiteDatabase = dbHelper.getWritableDatabase();        //进行查询        Cursor cursor=sqLiteDatabase.rawQuery("select * from login",null);        return cursor;    }    @Nullable    @Override    public String getType(@NonNull Uri uri) {        return null;    }    @Nullable    @Override    public Uri insert(@NonNull Uri uri, @Nullable ContentValues values) {        return null;    }    @Override    public int delete(@NonNull Uri uri, @Nullable String selection, @Nullable String[] selectionArgs) {        return 0;    }    @Override    public int update(@NonNull Uri uri, @Nullable ContentValues values, @Nullable String selection, @Nullable String[] selectionArgs) {        return 0;    }}
第二步:配置,加入以下配置信息

 <!--配置            1、authorities必选写上项目的package名+命名            2、name 写的是你的内容提供者        -->        <provider            android:authorities="com.example.g160628_android16_sqlite.ZhongZi"            android:name=".MyProvider"            android:exported="true"></provider>    </application>

第四步:接收内容,在你自己要获得该数据的地方写内容访问者

public class MainActivity extends AppCompatActivity {    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        //getContentResolver获得内容提供者        ContentResolver contentResolver=getContentResolver();        //转Uri,解析类   记得在authorities前面加content://协议        Uri uri=Uri.parse("content://com.example.g160628_android16_sqlite.ZhongZi");        //接收ContentResolver的游标        Cursor cursor=contentResolver.query(uri,null,null,null,null);        //循环打印值        while (cursor.moveToNext()){            String uname=cursor.getString(cursor.getColumnIndex("uname"));            Log.i("test",uname);        }    }}


这样就可以拿到另一个APP的数据库值了,当然两个APP必须都要在手机上运行的哦!
小编就整理到这啦,有什么疑问的可以私信我


阅读全文
1 0
原创粉丝点击