Я разрабатываю приложение с ContentProvider, чтобы предлагать некоторые внутренние файлы (двоичные файлы). Когда я развертываю его на Samsung Galaxy S, SII или любом другом, он отлично работает, покупайте, когда я пытаюсь использовать его на Galaxy Nexus или Nexus S, это не сработает!
Сценарий:
Доступ к моему ContentProvider можно получить с помощью двух URI. В зависимости от этого URI поставщик создает DataCursor (расширяя CrossProcessCursor) или ModelCursor (также расширяя CrossProcessCursos). Дело в том, что в семействе Nexus я обращаюсь к первому курсору (DataCursor), чтобы получить идентификатор, и он работает отлично, но при доступе к второму он всегда выбрасывает "OutOfBoundsException" при попытке
getBlob()
метод.
Provider
@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 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;
}
Если вам нужен какой-то код или что-то еще, просто попросите его, пожалуйста!
Большое спасибо.