0
嘿,我似乎無法理解這個錯誤。 我試圖通過拍照或從圖庫中選擇圖像。 當我嘗試的方法選擇的圖像,它工作正常,但是當我從相機拍攝的圖像我上cursor.close()
行錯誤的NullPointerException當試圖獲取圖像方向
我有這樣的代碼從庫捕捉圖像:
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);
}
}
除此之外,它很可能是零,因爲你的URI參數是無效的。一個可能的原因是你沒有恢復活動狀態,並且mImageUri領域成爲開啓相機後空。 –
這會使錯誤消失,但它不會再獲取圖像方向。和Paul-Jan,我不明白轉動相機的方式是如何相關的,我只是提出了活動結果,並且只做了活動肖像,以至於不能成爲原因。 –
對不起,對於遲到的答覆的方式:)經過適當的錯誤處理是時間來質疑爲什麼錯誤發生 - 閱讀:爲什麼'遊標'爲空? Aus Paul-Jan指出機會很高'photoUri'無效,因此'光標'的創建失敗。看看第一個代碼塊,我看到這個moethod就像'Helpers.getOrientation(this,selectedImage)'一樣被調用,而基本上'selectedImage = mImageUri'。後者「從代碼天堂下降」。如果你不能從這裏解決它,我會建議打開另一個更具體的問題。 – yoshi