【发布时间】:2015-08-07 14:46:33
【问题描述】:
此代码用于 Nexus 5 图片库。自从迁移到较新的 Google 相册应用选择图像后,此代码就会崩溃。
错误:
08-07 10:10:10.792 25086-25086/com.app.app E/CursorWindow﹕未能 从具有 1 行 7 列的 CursorWindow 读取第 0 行第 -1 列。 08-07 10:10:10.795 25086-25086/com.app.app D/AndroidRuntime﹕正在关闭 关闭 VM 08-07 10:10:10.801 25086-25086/com.app.app E/AndroidRuntime﹕ 致命例外:主要 进程:com.app.app,PID:25086 java.lang.RuntimeException: 传递结果失败 ResultInfo{who=null, request=2, result=-1, data=Intent { dat=content://com.google.android.apps.photos.contentprovider/-1/1/content://media/external/images/media/17870/ACTUAL/1285012603 flg=0x1 (有剪辑) }} 到活动 {com.app.app/com.app.app.PhotoActivity}: java.lang.IllegalStateException:无法读取第 0 行,列 -1 光标窗口。确保光标在之前正确初始化 从中访问数据。 在 android.app.ActivityThread.deliverResults(ActivityThread.java:3574) 在 android.app.ActivityThread.handleSendResult(ActivityThread.java:3617) 在 android.app.ActivityThread.access$1300(ActivityThread.java:151) 在 android.app.ActivityThread$H.handleMessage(ActivityThread.java:1352) 在 android.os.Handler.dispatchMessage(Handler.java:102) 在 android.os.Looper.loop(Looper.java:135) 在 android.app.ActivityThread.main(ActivityThread.java:5254) 在 java.lang.reflect.Method.invoke(本机方法) 在 java.lang.reflect.Method.invoke(Method.java:372) 在 com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:903) 在 com.android.internal.os.ZygoteInit.main(ZygoteInit.java:698) 原因:java.lang.IllegalStateException:无法从 CursorWindow 中读取第 0 行 col -1。确保光标已初始化 在从中访问数据之前正确。 在 android.database.CursorWindow.nativeGetString(Native Method) 在 android.database.CursorWindow.getString(CursorWindow.java:438) 在 android.database.AbstractWindowedCursor.getString(AbstractWindowedCursor.java:51) 在 android.database.CursorWrapper.getString(CursorWrapper.java:114) 在 com.app.app.PhotoActivity.getRealPathFromURI(PhotoActivity.java:456) 在 com.app.app.PhotoActivity.onActivityResult(PhotoActivity.java:436) 在 android.app.Activity.dispatchActivityResult(Activity.java:6192) 在 android.app.ActivityThread.deliverResults(ActivityThread.java:3570) 在 android.app.ActivityThread.handleSendResult(ActivityThread.java:3617) 在 android.app.ActivityThread.access$1300(ActivityThread.java:151) 在 android.app.ActivityThread$H.handleMessage(ActivityThread.java:1352) 在 android.os.Handler.dispatchMessage(Handler.java:102) 在 android.os.Looper.loop(Looper.java:135) 在 android.app.ActivityThread.main(ActivityThread.java:5254) 在 java.lang.reflect.Method.invoke(本机方法) 在 java.lang.reflect.Method.invoke(Method.java:372) 在 com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:903) 在 com.android.internal.os.ZygoteInit.main(ZygoteInit.java:698)
活动结果:
case ACTION_SELECT_PHOTO: {
if (resultCode == RESULT_OK) {
Uri selectedImageURI = data.getData();
File imageFile = new File(getRealPathFromURI(selectedImageURI)); // LINE 436
mCurrentPhotoPath = imageFile.toString();
if (mCurrentPhotoPath != null) {
setPic();
mCurrentPhotoPath = null;
}
}
break;
}
GETREALPATHFROMURI:
private String getRealPathFromURI(Uri contentURI) {
String result;
Cursor cursor = getContentResolver().query(contentURI, null, null, null, null);
if (cursor == null) {
result = contentURI.getPath();
} else {
cursor.moveToFirst();
int idx = cursor.getColumnIndex(MediaStore.Images.ImageColumns.DATA);
result = cursor.getString(idx); // HERE IS THE ERROR: LINE 456
cursor.close();
}
return result;
}
我猜我的问题出在两个地方之一,要么getContentResolver().query 需要使用一些更新的方法。或者getColumnIndex(MediaStore.Images.ImageColumns.DATA) MediaStore 是处理新的基于云的照片应用程序的错误方法。
【问题讨论】:
标签: java android android-intent