使用內容提供者ContentProvider與內容訪問者ContentResolver實現拿到另外一個項目的數據庫數據

比如說你要拿手機電話本的電話號碼,或者相冊,等等存到數據庫的東西,那麼內容提供者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必須都要在手機上運行的哦!
小編就整理到這啦,有什麼疑問的可以私信我


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章