アンドロイドカメラの起動を目的としたコードがあります。ユーザーが写真を撮って、保存したら画像のURIを保持できるようにします。android getContentResolver()。時折nullを返す場合があります。
これまでのところ、私はそれを動作させることができました。しかし、アプリがNPEでクラッシュする確率は50/50のようです。
private Uri mImageCaptureUri;
private void doTakePhotoAction() {
String fileName = "temp.jpg";
ContentValues values = new ContentValues();
values.put(MediaStore.Images.Media.TITLE, fileName);
mImageCaptureUri = getContentResolver().insert(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, values);
Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
intent.putExtra(MediaStore.EXTRA_OUTPUT, mImageCaptureUri);
startActivityForResult(intent, PICK_FROM_CAMERA);
}
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if (resultCode != RESULT_OK) {
return;
}
switch (requestCode) {
case PICK_FROM_CAMERA:
String[] projection = { MediaStore.Images.Media.DATA};
Cursor cursor = managedQuery(mImageCaptureUri, projection, null, null, null);
int column_index_data = cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA);
cursor.moveToFirst();
String capturedImageFilePath = cursor.getString(column_index_data);
Intent intent = new Intent(this, CropImage.class);
intent.putExtra("image-path", capturedImageFilePath);
intent.putExtra("scale", true);
startActivity(intent);
break;
}
}
NPEエラーが
Cursor cursor = managedQuery(mImageCaptureUri, projection, null, null, null);
バックラインに私を参照し、mImageCaptureUri
がヌルであるため、それがスローされている:私はなぜこれが
私のコードを起こっている見当がつかない。あなたは本当に心にAndroidの活動の最初のルールを取らなければなら誰もがこの問題を回避/仕事を修正する方法上の任意のアイデアを持っていますか、なぜこれが事実で
完璧な答えを格納し
onSaveInstanceState()
にmImageCaptureUri
ような状態を復元、および活性のonCreate()
でそれを復元することです。ありがとうございました! - ちょうどそれをテストし、それは素晴らしい動作します –