2011-09-18 24 views
30

Ho un problema che non riesco proprio a capire. Sto usando Eclipse per creare il mio provider di contenuti, ma continuo a ricevere il seguente errore:Impossibile trovare informazioni sul provider per "ContentProvider"

[..] ERROR/ActivityThread(1051): Failed to find provider info for my.package.provider.countrycontentprovider

codice trovato qui: http://codepad.org/Rx00HjHd

parti principali:

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" /> 

ho aggiunto il provider per la manifest e return true dalla funzione onCreate. Io uso il CountryContentProvider.CONTENT_URI nella mia attività per ottenere il Contenuto dal mio provider, ma continuo a ricevere quel messaggio di errore. Ho rimosso e aggiunto il codice tre volte (in caso di fusione di eclissi) senza alcun risultato.
Mi manca qualcosa. Qualcuno può indicarmi la giusta direzione?

risposta

48

Sono stato in grado di riprodurre il problema riscontrato quando ho spostato il provider <> dall'applicazione <> ... </application>. Eclipse non ha detto nulla come errore o avvertimento.

Fortunatamente questo problema viene rilevato da Android Lint partendo da ADT 20.

+2

Così ho significa che tag '' deve essere collocato all'interno di '' tag. –

+2

Inoltre, fai attenzione a non inserirlo in un tag come avevo fatto all'inizio. –

14

Ha funzionato per me solo dopo aver specificato il percorso completo in Authorities tag nel file manifesto (vedi codice di esempio SearchableDictionary in SDK).

<provider android:name=".DictionaryProvider" 
     android:authorities="com.example.android.searchabledict.DictionaryProvider"> 
-1

si ha una lettera maiuscola e sull'altra riga, una lettera minuscola.

android: name = "my.package.provider.- C -ountryContentProvider" android: autorità = "my.package.provider.- c -ountrycontentprovider"

deve essere la stessa ovunque.

public static final String PROVIDER = 
    "my.package.provider.countrycontentprovider"; 
+0

Le autorità devono corrispondere (vale a dire, lo stesso nel manifest come nel file di classe - 'my.package.provider.countrycontentprovider'). E i nomi delle classi devono corrispondere - 'my.package.provider.CountryContentProvider'. Quindi non penso che questo sia il problema. –

-2

Iscrivere il vostro provider nella Android Manifest

<provider 
    android:authorities="your_content_authority" 
    android:name="yourProviderClass"/> 
+1

L'op lo ha fatto. –

0

L'androide: autorità = nel file XML è l'autorità di contenuti che si trova nella classe contratto che probabilmente hai costruito. L'autorizzazione del contenuto viene aggiunta allo schema per rendere l'URI del contenuto di base. Plain English, il dominio inverso che hai usato per rendere la tua app no ​​cap qui com.domain.sub.appName.

android: nome è la cartella più la classe del provider è denominata, non dimenticare il punto .folder.ProviderClassContentAuthorityIsIn.

Spero che questo aiuti :)

Problemi correlati