安卓provider 的注意事項
阿新 • • 發佈:2019-02-09
這個問題搞了我一下午了,總算搞定了!
有的教程上的配置並不完善!比如黑馬!坑死人
被呼叫應用程式的目錄結構:
被呼叫的Manifest.xml的配置:
呼叫方的Manifest.xml的配置:<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.bao.mysqlite" android:versionCode="1" android:versionName="1.0" > <uses-sdk android:minSdkVersion="8" android:targetSdkVersion="19" /> <instrumentation android:name="android.test.InstrumentationTestRunner" android:targetPackage="com.bao.mysqlite" /> <permission android:name="com.baobao.hello.permission" android:protectionLevel="normal"> </permission> <span style="white-space:pre"> </span><application android:allowBackup="true" android:icon="@drawable/ic_launcher" android:label="@string/app_name" android:theme="@style/AppTheme" > <uses-library android:name="android.test.runner" /> <activity android:name="com.bao.mysqlite.ui.MainActivity" android:label="@string/app_name" > <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> <provider android:name="com.bao.mysqlite.provider.BaoProvider" android:authorities="com.baobao.hello.ok" android:exported="true" android:permission="com.baobao.hello.permission"/> </application> </manifest>
<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.bao.myother" android:versionCode="1" android:versionName="1.0" > <uses-sdk android:minSdkVersion="8" android:targetSdkVersion="19" /> <instrumentation android:name="android.test.InstrumentationTestRunner" android:targetPackage="com.bao.myother"/> <uses-permission android:name="com.baobao.hello.permission"/> <application android:allowBackup="true" android:icon="@drawable/ic_launcher" android:label="@string/app_name" android:theme="@style/AppTheme" > <uses-library android:name="android.test.runner" /> <activity android:name="com.bao.myother.MainActivity" android:label="@string/app_name" > <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> </application> </manifest>
測試方法:
<span style="white-space:pre"> </span>public void testProvider() { // 獲取一個ContentResovler, 它是一個可以用來訪問ContentProvider的工具 ContentResolver resolver = getContext().getContentResolver(); // 通過一個Uri指向剛剛建立的ContentProvider Uri uri = Uri.parse("content://com.baobao.hello.ok"); // 用ContentResovler訪問ContentProvider resolver.query(uri, null, null, null, null); int a = resolver.delete(uri, null, null); System.out.println(a); } public void testInsert() { ContentResolver resolver = getContext().getContentResolver(); Uri uri = Uri.parse("content://com.baobao.hello.ok"); ContentValues values = new ContentValues(); // 用來裝載資料的Map集合 values.put("name", "insert"); values.put("balance", 100); Uri resultUri = resolver.insert(uri, values); // 把資料插入到指定的內容提供者 System.out.println(resultUri); }
如果是這個問題: java.lang.IllegalArgumentException: Unknown URL content://*****
多半是地址無法解析,原因一般常見有2個
1、 URL 地址錯誤
2、許可權問題
如果是URL 地址錯誤 有可能是沒配置 <provider...> 或者配置錯誤,正確方法詳見上面!
如果是許可權問題 那就要配置uses-permission 記得呼叫方的配置檔案也要配置!
</pre><p></p><pre>