web-dev-qa-db-ja.com

「ContentProvider」のプロバイダー情報が見つかりませんでした

私には理解できない問題があります。 Eclipseを使用して独自のコンテンツプロバイダーを作成していますが、次のエラーが発生し続けます。

[..]エラー/ ActivityThread(1051):my.package.provider.countrycontentproviderのプロバイダー情報が見つかりませんでした

ここにあるコード: http://codepad.org/Rx00HjHd

主要な部分:

public class CountryContentProvider extends ContentProvider {

    public static final String PROVIDER = 
         "my.package.provider.countrycontentprovider";
    public static final Uri CONTENT_URI = 
         Uri.parse("content://" + PROVIDER + "/country");
    // ...
    @Override
    public boolean onCreate() { return true; }
    // ...
}


// from my activity
ContentResolver resolver = getContentResolver();
Cursor c = resolver.query(CountryContentProvider.CONTENT_URI, 
                                  null, null, null, null);  

// AndroidManifest.xml
<provider
    Android:name="my.package.provider.CountryContentProvider"
    Android:authorities="my.package.provider.countrycontentprovider" />

プロバイダーをマニフェストに追加し、onCreate関数からtrueを返しました。アクティビティでCountryContentProvider.CONTENT_URIを使用してプロバイダーからコンテンツを取得しますが、そのエラーメッセージが表示されるだけです。 (Eclipseがメルトダウンした場合)コードを3回削除して追加しましたが、役に立ちませんでした。
何かが欠けているに違いありません。誰かが私を正しい方向に向けることができますか?

30
Default

<provider>を<application> ... </ application>タグから移動したときに、問題を再現できました。 Eclipseはエラーや警告のようなことを何も言いませんでした。

幸いなことに、この問題はADT 20以降のAndroid Lintによって検出されます。

49
Darth Beleg

マニフェストファイルのAuthoritiesタグにフルパスを指定した後にのみ機能しました(SDKのSearchableDictionaryサンプルコードを参照)。

<provider Android:name=".DictionaryProvider"
       Android:authorities="com.example.Android.searchabledict.DictionaryProvider">
15
andude

マニフェストのプロバイダータグでエクスポートされた属性をtrueに設定すると、うまくいきました:

Android:exported="true"

ドキュメント( http://developer.Android.com/guide/topics/manifest/provider-element.html#exported )によると、エクスポートはプロバイダーが他に利用できる場合にのみ必要ですアプリケーション。しかし、これは私のために働いた唯一の解決策です。

1
faizal

XMLファイルのAndroid:authorities =は、おそらく作成したコントラクトクラスにあるコンテンツ機関です。コンテンツ権限がスキームに追加され、ベースコンテンツURIが作成されます。平易な英語、com.domain.sub.appNameでアプリに上限を設けないために使用した逆ドメイン。

Android:nameは、プロバイダーに名前が付けられたフォルダーとクラスです。ドット.folder.ProviderClassContentAuthorityIsInを忘れないでください。

お役に立てれば :)

0
TryHarder