嘿,我似乎无法理解这个错误。
我试图通过拍照或从画廊中选择来选择图像。
当我在选定的图像上尝试该方法时,它工作正常,但当我从相机拍摄图像时,我在cursor.close()
行上得到错误
我有这个代码来从图库中捕获图像:
if (requestCode == CAPTURE_IMAGE_ACTIVITY_REQUEST_CODE && resultCode == RESULT_OK) {
Uri selectedImage = mImageUri;
getContentResolver().notifyChange(selectedImage, null);
ImageView imageView = (ImageView) findViewById(R.id.chosenImage2);
ContentResolver cr = getContentResolver();
try {
bitmap = android.provider.MediaStore.Images.Media
.getBitmap(cr, selectedImage);
//flip image if needed
bitmap = Helpers.flipBitmap(bitmap, Helpers.getOrientation(this, selectedImage));
imageView.setImageBitmap(bitmap);
} catch (Exception e) {
Toast.makeText(this, "Failed to load", Toast.LENGTH_SHORT)
.show();
e.printStackTrace();
Log.e("Camera", e.toString());
}
}
这是getOrientation代码:
public static int getOrientation(Context context, Uri photoUri) {
Cursor cursor = context.getContentResolver().query(photoUri,
new String[] { MediaStore.Images.ImageColumns.ORIENTATION },
null, null, null);
try {
if (cursor.moveToFirst()) {
return cursor.getInt(0);
} else {
return -1;
}
} finally {
cursor.close();
}
}
这会产生空指针异常,我无法理解为什么。
任何帮助?
修改
这就是我称之为意图的方式:
ImageView imageView = (ImageView) findViewById(R.id.chosenImage2);
if(imageView.getDrawable() == null){
Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
File photo = new File(Environment.getExternalStorageDirectory(), System.currentTimeMillis()+ ".jpg");
intent.putExtra(MediaStore.EXTRA_OUTPUT,
Uri.fromFile(photo));
mImageUri = Uri.fromFile(photo);
startActivityForResult(intent, CAPTURE_IMAGE_ACTIVITY_REQUEST_CODE);
}
}
答案 0 :(得分:1)
ContentResolver.query(...)可能会返回null,因为您可以在documentation中找到。
cursor.moveToFirst()
很可能会NullPointerException
停止try
阻止执行finally
阻止但运行cursor.close()
代码:
null.close()
= cursor != null
= { Kabam的。
您可以在不同的地方查看try
。例如。在进入finally
块或public static int getOrientation(Context context, Uri photoUri) {
Cursor cursor = context.getContentResolver().query(photoUri,
new String[] { MediaStore.Images.ImageColumns.ORIENTATION },
null, null, null);
//cursor might be null!
try {
int returnMe;
if (cursor.moveToFirst()) {
returnMe = cursor.getInt(0);
} else {
returnMe = -1;
}
cursor.close();
return returnMe;
} catch(NullPointerException e) {
//log: no cursor found returnung -1!
return -1;
}
}
块之前。
然而,最安全的方法是捕获NullPointerException。
{{1}}