Android-Activity似乎在意图返回后不会被调用
我有一个活动,您可以单击一个按钮,将您发送到一个可以添加图片的活动(使用startActivityForResult)。您可以添加几张图片。您添加的每幅图片都将转换为byte[]数组,并作为额外图片存储在结果中。当第二个活动完成时,如果我添加了一张图片,并完成了该活动,则一切正常,它将使用按钮返回到上一个活动。如果我添加两张或更多的图片,并完成第二个活动,则前一个活动甚至不会被调用。通过按钮,我可以直接进入活动之前的活动,但首先我看到一个黑屏,似乎前一个活动崩溃了,尽管在日志中找不到错误。上一个Activity中的OnActivityResult也不会被调用。为什么会发生这种情况 向照片添加活动发送意图的代码:Android-Activity似乎在意图返回后不会被调用,android,Android,我有一个活动,您可以单击一个按钮,将您发送到一个可以添加图片的活动(使用startActivityForResult)。您可以添加几张图片。您添加的每幅图片都将转换为byte[]数组,并作为额外图片存储在结果中。当第二个活动完成时,如果我添加了一张图片,并完成了该活动,则一切正常,它将使用按钮返回到上一个活动。如果我添加两张或更多的图片,并完成第二个活动,则前一个活动甚至不会被调用。通过按钮,我可以直接进入活动之前的活动,但首先我看到一个黑屏,似乎前一个活动崩溃了,尽管在日志中找不到错误。上一个
Intent addEditPicturesIntent = new Intent(getApplicationContext()
,AddOrEditPicturesOnProductActivity.class);
startActivityForResult(addEditPicturesIntent,33);
完成照片添加活动的代码:
Intent returnIntent=new Intent();
if (hashMap.containsKey("one")){
Log.d(TAG,"Submit Button clicked and now putting extra in intent-->1");
returnIntent.putExtra("1",hashMap.get("one"));
}
if (hashMap.containsKey("two")){
Log.d(TAG,"Submit Button clicked and now putting extra in intent-->2");
returnIntent.putExtra("2",hashMap.get("two"));
}
if (hashMap.containsKey("three")){
Log.d(TAG,"Submit Button clicked and now putting extra in intent-->3");
returnIntent.putExtra("3",hashMap.get("three"));
}
setResult(Activity.RESULT_OK, returnIntent);
finish();
使用按钮的“活动”中的onActivityResult代码:
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
Log.d(TAG,"onAcitivtyResult"); // <--- NOT EVEN THIS GETS CALLED when returning
if (//uninmportant stuff){
//Other uninporant stuff
else if(requestCode == 33){
Log.d(TAG,"[Test Return Code returned]!");
Log.d(TAG,data.getExtras().toString());
Bundle bundle=data.getExtras();
List<ProductImage> productImageList=new ArrayList<>();
for (Integer i=1;i<=3;i++){
if ( bundle.getByteArray(i.toString())!=null){
ProductImage productImage=new ProductImage();
productImage.setImageBytes(bundle.getByteArray(i.toString()));
productImageList.add(productImage);
}
}
addProductViewModel.fillUpMutableLiveData(productImageList);
addProductViewModel.updateCurrentId(0);
}
}
@覆盖
ActivityResult上的公共void(int请求代码、int结果代码、意图数据){
Log.d(标记“onAcitivtyResult”);//
您添加的每幅图片都将转换为byte[]数组,并作为额外图片存储在结果中
这真是个坏主意
虽然在日志中找不到错误
您可能会收到“绑定器事务失败”警告
为什么会发生这种情况
我的猜测是您试图通过IPC传递太多数据。您提供给setResult()
的Intent
将从您的应用程序传递到核心操作系统进程,然后返回到您的应用程序和startActivityForResult()的调用者
。在IPC事务中,最多可以通过1MB,根据当时的情况,限制可能会大大降低
要么:
- 通过对UI的各个位使用片段,并使用共享的
ViewModel
将一个片段的结果公开给另一个片段,进行一项而不是两项活动;或
- 小心地将这些图像保存在共享缓存中,以便将缓存键作为附加项传递,而不是
字节[]
;或者
- 找到一些您喜欢的其他体系结构,这些体系结构不涉及将大的
字节[]
值放入意图
中,以便与startActivity()
、startActivityForResult()
或setResult()一起使用
活动调用代码在哪里?请将您的代码剪下以便更好地理解。添加到postYeah的代码我非常确定这是一个可怕的想法,如果失败,我将使用一个片段来完成。我只是不明白为什么失败。也许,与其存储整个图像以发送回去,不如存储URI或其他什么?