2014-10-17 37 views
0

尝试从活动返回字节数组时遇到一些麻烦。返回代码是:bytearray in extra break return

private void returnLocation(byte[] mapImage) { 

    Intent intent = new Intent();  
    intent.putExtra("mapImage", mapImage); 
    setResult(RESULT_OK, intent); 

    finish(); 
} 

编辑:这是我的呼吁,并尝试接受它的父活动:

.... 
Intent i = new Intent(getActivity(), ChildActivity.class); 
ParentFragment.this.startActivityForResult(i, 255); 
... 

公共无效onActivityResult(INT requestCode,INT发送resultCode,Intent数据传输){

if(requestCode == 255) { 
     if(resultCode == Activity.RESULT_OK) {    
      mImage = data.getByteArrayExtra("mapImage");     
     } 
    } 
} 

我在onActiviyResult上有一个断点,当我尝试返回一个字节数组时,它从未被击中。

但是,当试图返回意图时,它返回到第一个活动(不是调用它的那个)。我看不到任何在记录器中出现问题的东西。

如果我将额外值更改为'5'(整数),则返回正常。

当我试图传回一个字节数组时,是否有某些东西丢失?

感谢

+0

请发布如何在第二个活动 – 2014-10-17 21:21:05

+0

中获取额外资源虽然这是问题,但它并未在传递字节数组时触及第二个活动。它的确如果一个整数被传递。 – ADringer 2014-10-18 06:46:22

+0

,它依靠第二个活动的代码... – 0699 2014-10-18 07:09:11

回答

1

Android对Bundle的大小有限制,这是Intent在内部使用的限制。如果数据超出捆绑包大小,它将在日志中显示ERROR/JavaBinder(7881): !!! FAILED BINDER TRANSACTION !!,但不会抛出异常。

尝试将字节数组写入临时文件并在Intent中传递文件名。

+0

太棒了,这就是感谢的问题!图像太大了。 继续从你的建议,当我保存图像到临时文件,然后立即读回到父活动的内存中,我担心没有关于性能? – ADringer 2014-10-20 11:49:13

+0

这就是我在我的应用程序中所做的:)只要确保**在完成后删除临时文件**。 – AesSedai101 2014-10-20 13:52:53

0

我想通您呼叫从一个片段startActivityForResult(I,255)。

而不是调用ParentFragment.this.startActivityForResult(i,255);

你应该调用:startActivityForResult(i,255);

如果上面的方法不起作用,请尝试以下操作:

既然这样,你需要重写活动的onActivityResult(承载您的片段被onActivityResult()的结果)的活动,呼吁super.onActivityResult()在你的片段传播到未处理结果代码或所有代码片段。

+0

'ChildActivity'必须调用finish才能将数据传回给调用活动。 – AesSedai101 2014-10-20 08:15:12

+1

@ AesSedai101,我很抱歉我以前的回答,我的错误。检查我编辑的答案。 – Akhil 2014-10-20 09:01:02