通过 onActivityResult 设置位图:传递结果失败
Setting bitmap via onActivityResult: Failure delivering result
我正在使用 startActivityForResult 和 onActivityResult 尝试从相机/画廊获取图像并将它们显示在以编程方式生成的 ImageView 中。我可以使用和显示图库图像,但是我遇到了相机图像问题。
我在我的 listAdapter 中为图库按钮(打开自定义图库 class 到 select 多个图像)和相机按钮(打开相机应用程序)在 formListAdapter.java:
private void openCustomGallery() {
Intent intent = new Intent(context, CustomPhotoGalleryActivity.class);
context.startActivityForResult(intent, PICK_IMAGE_MULTIPLE);
}
private void launchCamera() {
Intent cameraIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
context.startActivityForResult(cameraIntent, CAMERA_REQUEST);
}
然后使用 switch 语句调用 onActivityResult 以确定来自我的主 activity formsActivity.java:
的请求代码
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (resultCode == RESULT_OK) {
switch (requestCode) {
case PICK_IMAGE_MULTIPLE:
Log.i("Gallery Request Fired", "Yes");
//Declare imagePaths / ArrayList to store bitmaps
imagesPathList = new ArrayList<String>();
bitmapImages = new ArrayList<Bitmap>();
String[] imagesPath = data.getStringExtra("data").split("\|");
//Loop through selected images
for (int i = 0; i < imagesPath.length; i++) {
//Reduce file size
compressBitmap = decodeSampledBitmapFromResource(imagesPath[i],
350, 350);
//Add image to array
bitmapImages.add(compressBitmap);
}
//Send bitmap to listview & refresh
formListAdapter.getBitmap(bitmapImages);
adapter.notifyDataSetChanged();
break;
case CAMERA_REQUEST:
Log.i("Camera Request Fired", "Yes");
//I've tried various logic here, however bitmap is always null and never set.
Bitmap datifoto = null;
Uri picUri = data.getData();//<- get Uri here from data intent
if (picUri != null) {
try {
//Not setting datifoto
datifoto = android.provider.MediaStore.Images.Media.getBitmap(
this.getContentResolver(),
picUri);
//ERROR HERE ==> Null pointer exception because "datifoto" is null and not set
bitmapImages.add(datifoto);
} catch (FileNotFoundException e) {
throw new RuntimeException(e);
} catch (IOException e) {
throw new RuntimeException(e);
}
}
break;
default:
Log.i("Default", "Yes");
break;
}
}
}
但是,这总是 returns 一个“尝试在空对象引用上调用虚拟方法 'boolean java.util.ArrayList.add(java.lang.Object)'”,因为我试图向数组添加一个空对象,由于未设置位图:
Caused by : java.lang.RuntimeException : Failure delivering result ResultInfo {
who = null,
request = 1888,
result = -1,
data = Intent {act = inline - data dat = content : //media/external/images/media/18125 (has extras) }}
to activity {net.swnton_blandpjkeary.james.pjkearymobileinspections/net.swnton_blandpjkeary.james.pjkearymobileinspections.formsActivity}:
java.lang.NullPointerException: Attempt to invoke virtual method 'boolean java.util.ArrayList.add(java.lang.Object)' on a null object reference
理想情况下,我会设置位图,将其添加到 ArrayList,然后将此列表传递给适配器以在 ImageView 中进行设置。我假设我没有正确处理 Intent 数据,但我尝试了很多解决方案,结果都相同。
在此先感谢您的帮助:)
我必须在 switch 语句之外声明 bitmapImages = new ArrayList<>();
...:|
我正在使用 startActivityForResult 和 onActivityResult 尝试从相机/画廊获取图像并将它们显示在以编程方式生成的 ImageView 中。我可以使用和显示图库图像,但是我遇到了相机图像问题。
我在我的 listAdapter 中为图库按钮(打开自定义图库 class 到 select 多个图像)和相机按钮(打开相机应用程序)在 formListAdapter.java:
private void openCustomGallery() {
Intent intent = new Intent(context, CustomPhotoGalleryActivity.class);
context.startActivityForResult(intent, PICK_IMAGE_MULTIPLE);
}
private void launchCamera() {
Intent cameraIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
context.startActivityForResult(cameraIntent, CAMERA_REQUEST);
}
然后使用 switch 语句调用 onActivityResult 以确定来自我的主 activity formsActivity.java:
的请求代码@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (resultCode == RESULT_OK) {
switch (requestCode) {
case PICK_IMAGE_MULTIPLE:
Log.i("Gallery Request Fired", "Yes");
//Declare imagePaths / ArrayList to store bitmaps
imagesPathList = new ArrayList<String>();
bitmapImages = new ArrayList<Bitmap>();
String[] imagesPath = data.getStringExtra("data").split("\|");
//Loop through selected images
for (int i = 0; i < imagesPath.length; i++) {
//Reduce file size
compressBitmap = decodeSampledBitmapFromResource(imagesPath[i],
350, 350);
//Add image to array
bitmapImages.add(compressBitmap);
}
//Send bitmap to listview & refresh
formListAdapter.getBitmap(bitmapImages);
adapter.notifyDataSetChanged();
break;
case CAMERA_REQUEST:
Log.i("Camera Request Fired", "Yes");
//I've tried various logic here, however bitmap is always null and never set.
Bitmap datifoto = null;
Uri picUri = data.getData();//<- get Uri here from data intent
if (picUri != null) {
try {
//Not setting datifoto
datifoto = android.provider.MediaStore.Images.Media.getBitmap(
this.getContentResolver(),
picUri);
//ERROR HERE ==> Null pointer exception because "datifoto" is null and not set
bitmapImages.add(datifoto);
} catch (FileNotFoundException e) {
throw new RuntimeException(e);
} catch (IOException e) {
throw new RuntimeException(e);
}
}
break;
default:
Log.i("Default", "Yes");
break;
}
}
}
但是,这总是 returns 一个“尝试在空对象引用上调用虚拟方法 'boolean java.util.ArrayList.add(java.lang.Object)'”,因为我试图向数组添加一个空对象,由于未设置位图:
Caused by : java.lang.RuntimeException : Failure delivering result ResultInfo {
who = null,
request = 1888,
result = -1,
data = Intent {act = inline - data dat = content : //media/external/images/media/18125 (has extras) }}
to activity {net.swnton_blandpjkeary.james.pjkearymobileinspections/net.swnton_blandpjkeary.james.pjkearymobileinspections.formsActivity}:
java.lang.NullPointerException: Attempt to invoke virtual method 'boolean java.util.ArrayList.add(java.lang.Object)' on a null object reference
理想情况下,我会设置位图,将其添加到 ArrayList,然后将此列表传递给适配器以在 ImageView 中进行设置。我假设我没有正确处理 Intent 数据,但我尝试了很多解决方案,结果都相同。
在此先感谢您的帮助:)
我必须在 switch 语句之外声明 bitmapImages = new ArrayList<>();
...:|