我正在使用代码从库中获取Bitmap并将其用于我的目的。 这是代码:
protected void onActivityResult(int requestCode, int resultCode,Intent data) {
if (resultCode == RESULT_OK) {
Uri targetUri = data.getData();
Bitmap bitmap = null;
bitmap = BitmapFactory.decodeFile(getRealPathFromURI(targetUri));
//bitmap = BitmapFactory.decodeStream(getContentResolver().openInputStream(targetUri));
addMarker(bitmap);
}
}
public String getRealPathFromURI(Uri contentUri) {
// can post image
String [] proj={MediaStore.Images.Media.DATA};
Cursor cursor = managedQuery( contentUri,
proj, // Which columns to return
null, // WHERE clause; which rows to return (all rows)
null, // WHERE clause selection arguments (none)
null); // Order-by clause (ascending by name)
int column_index = cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA);
cursor.moveToFirst();
return cursor.getString(column_index);
}
由于某种原因,应用程序在执行时崩溃了。问题不在于addMarker方法,因为它与其他测试的位图一起工作正常。只有来自画廊的位图才能起作用和粉碎。
这是我得到的错误:
09-29 21:28:35.960: E/AndroidRuntime(4746):
java.lang.RuntimeException: Failure delivering result ResultInfo
{who=null, request=1, result=-1, data=Intent
{ dat=content://media/external/images/media/3 }} to activity
{com.sit.augmented_reality/com.sit.augmented_reality.activity.Demo}:
java.lang.NullPointerException
答案 0 :(得分:0)
很多问题 - 需要堆栈跟踪才能正确回答问题。
然而,明显的问题是:
(最有可能)您在getRealPathFromURI
内使用的光标未关闭。您需要在从方法返回之前关闭它。保存cursor.getString()
的值,然后关闭光标并返回保存的值。
(不太可能)位图加载/内存不足异常。您需要正确清理加载的位图。 Android在管理位图方面做了很好的非常糟糕的工作。在这个问题上花了两年时间与操作系统作斗争,我现在假设管理它们的底层代码被打破了。有关如何在StackOverflow和Android手册中执行此操作的无数示例......