我正在开发一个带有 ContentProvider 的应用程序来提供一些内部文件(二进制文件)。当我在三星 Galaxy S、SII 或任何其他设备上部署它时,它运行良好,当我在 Galaxy Nexus 或 Nexus S 上试用时购买,它不起作用!
设想:
可以使用两个 URI 访问我的 ContentProvider。根据此 URI,提供者创建 DataCursor(扩展 CrossProcessCursor)或 ModelCursor(也扩展 CrossProcessCursos)。事实是,在 Nexus 系列中,我访问第一个游标 (DataCursor) 以检索标识符,并且它工作正常,但是在访问第二个游标时,它总是在尝试时抛出“OutOfBoundsException”
获取Blob()
方法。
提供者
@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;
}
如果您需要一些代码或任何东西,请索取!
非常感谢。