2011-09-18 11 views
30

Tengo un problema que no puedo resolver. Estoy usando Eclipse para crear mi propio proveedor de contenidos, pero obtengo el siguiente error:Error al encontrar la información del proveedor para 'ContentProvider'

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

Código encontrar aquí: http://codepad.org/Rx00HjHd

partes principales:

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

he añadido el proveedor a la manifiesta y devuelve verdadero a partir de la función onCreate. Uso el CountryContentProvider.CONTENT_URI en mi actividad para obtener el Contenido de mi proveedor, pero sigo recibiendo ese mensaje de error. He eliminado y agregado el código tres veces (en caso de fusión del eclipse) en vano.
Me falta algo. ¿Alguien me puede apuntar en la dirección correcta?

Respuesta

48

que era capaz de reproducir su problema cuando me mudé < proveedor> salir de la ... </aplicación de etiquetas < aplicación>>. Eclipse no dijo nada como error o advertencia.

Afortunadamente este problema se detecta por Android Lint partir de ADT 20.

+2

Así que significa que la etiqueta '' será colocado dentro de la etiqueta '' . –

+2

Además, tenga cuidado de no ponerlo dentro de una etiqueta como lo había hecho al principio. –

14

Se trabajó para mí sólo después de especificar ruta completa en Authorities etiqueta en el archivo de manifiesto (ver código de ejemplo en SearchableDictionary SDK).

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

tiene una letra mayúscula y en la otra línea, una letra minúscula.

android: name = "my.package.provider.- C -ountryContentProvider" androide: autoridades = "my.package.provider.- c -ountrycontentprovider"

que debe ser el mismo en todos lados.

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

Las autoridades deben coincidir (es decir, lo mismo en el manifiesto que en el archivo de clase - 'my.package.provider.countrycontentprovider'). Y los nombres de las clases deben coincidir: 'my.package.provider.CountryContentProvider'. Entonces, no creo que este sea el problema. –

-2

Registra tu proveedor en el manifiesto de Android

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

La operación lo ha hecho. –

0

El androide: autoridades = en el archivo XML es la autoridad de contenido que se encuentra en la clase de contrato que probablemente se construyó. La autoridad de contenido se agrega al esquema para crear el URI de contenido base. Plain English, el dominio reverso que utilizó para que su aplicación no tenga límites aquí com.domain.sub.appName.

El android: nombre es la carpeta más la clase de su proveedor, no olvide el punto .folder.ProviderClassContentAuthorityIsIn.

Espero que esto ayude :)

Cuestiones relacionadas