来自图库的位图导致崩溃 - Android

时间:2012-09-29 18:58:54

标签: java android bitmap

我正在使用代码从库中获取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

1 个答案:

答案 0 :(得分:0)

很多问题 - 需要堆栈跟踪才能正确回答问题。

然而,明显的问题是:

  1. (最有可能)您在getRealPathFromURI内使用的光标未关闭。您需要在从方法返回之前关闭它。保存cursor.getString()的值,然后关闭光标并返回保存的值。

  2. (不太可能)位图加载/内存不足异常。您需要正确清理加载的位图。 Android在管理位图方面做了很好的非常糟糕的工作。在这个问题上花了两年时间与操作系统作斗争,我现在假设管理它们的底层代码被打破了。有关如何在StackOverflow和Android手册中执行此操作的无数示例......