1. 程式人生 > >安卓provider 的注意事項

安卓provider 的注意事項

這個問題搞了我一下午了,總算搞定了!

有的教程上的配置並不完善!比如黑馬!坑死人

被呼叫應用程式的目錄結構:

被呼叫的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>
呼叫方的Manifest.xml的配置:
<?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>