Android ContentProvider を呼び出すと、次の例外が発生します。
java.lang.RuntimeException: アクティビティ ComponentInfo を開始できません{de.harm.android.couchone/de.harm.android.couchone.CouchContactClient}: java.lang.IllegalArgumentException: 不明な URL content://de.harm.android.couchone .プロバイダ/test2
これらはプロジェクトです:
- https://github.com/der-harm/CouchOneProvider
- .../CouchOneContacts
Android はいわゆるContentResolver
を使用して通信しContentProvider
、次に永続化機能 (データベースへのアクセス) を処理します。
はContentProvider
一意の Uri で登録されます。は、このUri を使用して をContentResolver
呼び出し、ContentProvider
SQL クエリ文字列や保存するデータなどの追加データを渡します。
CouchOneProvider
/AndroidManifest.xml
には、次のものがあります。
<provider android:authorities="de.harm.android.couchone.provider"
android:name=".Provider" />
プロバイダーが使用する
static {
uriMatcher = new UriMatcher(UriMatcher.NO_MATCH);
uriMatcher.addURI(PROVIDER_NAME, DB_Name, URI_COLLECTION);
uriMatcher.addURI(PROVIDER_NAME, DB_Name + "/#", URI_ENTITY);
}
と
public static boolean isCollectionUri(Uri uri) {
return uriMatcher.match(uri) == URI_COLLECTION;
}
を呼び出すためにCONTENT_URI
によって使用されるを処理するには:ContentResolver
ContentProvider
- 両方のいずれかに権限がありませ
AndroidManifest.xml
んか? - 権限を
AndroidManifest.xml
間違って定義していますか? CONTENT_URI
間違っていますか?
アップデート:
追加情報があります:
Logcat は次のように述べています。
de.harm.android.couchone.provider のプロバイダー情報が見つかりませんでした
これが出発点であるべきです。しかし、これまでのところ、解決策を見つけることができませんでした。
ContentProvider
実装の完全修飾クラス名は次のとおりです。
de.harm.android.couchone.Provider
AndroidManifext.xml
名前が小文字であることを除いて、これは権限として正確に指定されていますが、これで問題ありません。
パッケージ名はxmlファイルであらかじめ定義されているので、「.Provider」でもOKです。
例外に見られるように、クライアントは次を呼び出します。
content://de.harm.android.couchone.provider/test2
Logcatsの答えは次のとおりです。
de.harm.android.couchone.provider のプロバイダー情報が見つかりませんでした
何が欠けているのかわかりません。おそらく、Eclipse またはエミュレーターの問題でしょうか?
「run project as Android application」でプロバイダーをインストールします。