Estoy desarrollando una aplicación con ContentProvider para ofrecer algunos archivos internos (archivos binarios). Cuando lo despliego en un Samsung Galaxy S, SII o cualquier otro, funciona perfectamente, compro cuando lo pruebo en un Galaxy Nexus o Nexus S, ¡no funciona!Proveedor de contenido que no funciona en los dispositivos de la familia Nexus
Escenario:
Mi ContentProvider se puede acceder con dos URIs. Dependiendo de este URI, el proveedor crea un DataCursor (extendiendo CrossProcessCursor) o ModelCursor (extendiendo CrossProcessCursos también). El hecho es que, en la familia Nexus, accedo al primer cursor (DataCursor) para recuperar un identificador, y funciona perfectamente, pero cuando se accede a la segunda, que siempre lanza "OutOfBoundsException" al intentar
getBlob ()
method.
Proveedor
@Override
public Cursor query(Uri uri, String[] projection, String selection, String[] selectionArgs, String sortOrder) {
Cursor cursor = null;
// If the third app requieres DATA (phrase id, phrase string and phrase name)
if(uri.toString().equalsIgnoreCase(ProviderConstants.DATA_URI.toString())) {
// Build the DataHelper and the customized cursor
DataHelper dataHelper = new DataHelper(getContext());
cursor = new DataCursor(dataHelper);
} else if(uri.toString().equalsIgnoreCase(ProviderConstants.MODEL_URI.toString())) {
// Let's take the model id from the selectionArgs...
if (selectionArgs != null && selectionArgs.length > 0) {
String modelId = selectionArgs[0];
// Get an instance to the persistent storage service...
File file = FileManager.getDirectory(getContext(), modelId);
FileSystemPersistentStorageService clientPersistentStorageService = new FileSystemPersistentStorageService(file);
cursor = new ModelCursor(clientPersistentStorageService);
} else {
Log.e("ContentProvider", "Query without model id on selectionArgs");
}
}
return cursor;
}
Si necesita algo de código ni nada, sólo tiene que pedirlo por favor!
Muchas gracias.
Para empezar: ** 1. ** ¿Cuáles son las versiones exactas de SDK presentes en sus dispositivos Android? ** 2. ** ¿Cuáles son las versiones * SQLite * exactas en cada dispositivo ('adb shell sqlite3 --version') ** 3. ** ¿El código funciona correctamente en el emulador? ** 4. ** ¿Cuál es la pila de llamadas completa, cuando obtienes * OutOfBoundsException *? ** 5. ** ¿Cómo se implementa * ModelCursor *? ** 6. ** ¿Cuál es su modelo de base de datos? ** 7. ** ¿Cómo usas tu proveedor de contenido (código)? – vArDo
1. De 2.3.3 a 4.0 (amplia gama de dispositivos) 2. ¿Importa? Puedo verificarlos, pero ModelCursor no obtiene datos de SQLite, solo del almacenamiento interno de archivos.3. [Para ser probado, gracias]. 4. [enlace] (http://pastebin.com/NS7zBSGx). 5. Simplemente mehotd 'getBlob' y los demás requieren [link] (http://pastebin.com/q4kMAEw3). 6. No se necesita una base de datos. 7. 'Cursor modelCursor = getContentResolver(). Query (Uri.parse (" content: // "+ PROVIDER_NAME +"/model "), null, null, new String [] {modelId}, null);' - 'modelCursor .getBlob (0); ' – manelizzard
¿Ha intentado mover el cursor a la primera entrada? ('modelCursor.moveToFirst()') – SteveR