ユーザーがそのアクティビティの ImageView に画像を追加できるアクティビティを作成しました。アクティビティのコンテキスト メニューを開き、ユーザーがギャラリーから写真を選択するか、カメラで写真を撮るかを選択できるボタンを作成しました。最初のオプション - ギャラリーから写真を選ぶ - を選択すると、
問題なく動作します。ギャラリーが開き、写真を選択すると、アクティビティが再開され、写真が ImageView に追加されます。2 番目のオプションを選択して写真を撮り、アクティビティを再開すると、
奇妙なことが起こり始めます。
- コンテキスト メニューをもう一度開いてギャラリーを開こうとすると、代わりにカメラ アクティビティが開かれます
- カメラ アクティビティを閉じてアクティビティを再開すると、[操作を完了する] ダイアログが表示されます
- ギャラリーを開いて写真を選択すると、NullPointerException がスローされます
この動作と例外が発生するのはなぜですか? 同様のトピックを検索してみましたが、解決策が見つかりませんでした。
以下は私の活動の方法です
public boolean onContextItemSelected(MenuItem item) {
super.onContextItemSelected(item);
switch(item.getItemId()) {
case R.id.cm_Select_picture: {
// TODO open gallery
Intent intent = new Intent();
intent.setType("image/*");
intent.setAction(Intent.ACTION_GET_CONTENT);
startActivityForResult(Intent.createChooser(intent, ""), RC_SELECT_PICTURE);
}
case R.id.cm_Take_picture: {
// TODO open camera
Intent cameraIntent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE);
startActivityForResult(cameraIntent, RC_TAKE_PICTURE);
}
default: return false;
}
}
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if(resultCode == RESULT_OK) {
switch(requestCode) {
case RC_SELECT_PICTURE: {
Log.d(TAG, "Case select picture");
Uri selectedImageUri = data.getData();
String[] filePathColumn = {MediaStore.Images.Media.DATA};
Cursor cursor = getContentResolver().query(selectedImageUri
, filePathColumn, null, null, null);
cursor.moveToFirst();
int columnIndex = cursor.getColumnIndex(filePathColumn[0]);
String filePath = cursor.getString(columnIndex);
cursor.close();
Bitmap pic = BitmapFactory.decodeFile(filePath);
goodsImage.setImageBitmap(pic);
}
case RC_TAKE_PICTURE: {
Log.d(TAG, "Case take picture");
if(data.getExtras().get("data") != null) {
Bitmap pic = (Bitmap) data.getExtras().get("data");
goodsImage.setImageBitmap(pic);
}
}
}
}
}
04-26 01:34:59.529: E/AndroidRuntime(20531): java.lang.RuntimeException: Failure delivering result ResultInfo{who=null, request=3, result=-1, data=Intent { dat=content://media/external/images/media/9 }} to activity {com.forestassistant/com.statistics.GoodsActivity}: java.lang.NullPointerException