3

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

これらはプロジェクトです:

Android はいわゆるContentResolverを使用して通信しContentProvider、次に永続化機能 (データベースへのアクセス) を処理します。

ContentProvider一意の Uri で登録されます。は、このUri を使用して をContentResolver呼び出し、ContentProviderSQL クエリ文字列や保存するデータなどの追加データを渡します。

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によって使用されるを処理するには:ContentResolverContentProvider

  • 両方のいずれかに権限がありませ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」でプロバイダーをインストールします。

4

2 に答える 2

3

私はこの問題を解決しました:

両方のプロジェクトのパッケージ構造は同じでした。とに変更de.harm.android.couchoneしました。de.harm.android.couchone.providerde.harm.android.couchone.client

于 2010-12-14T10:06:15.683 に答える
0

このリンクは質問のトピックに関連していると思います。カスタム content-provider の実装方法。

于 2012-05-28T06:34:58.227 に答える