【问题标题】:bytearray in extra breaking return额外中断返回中的字节数组
【发布时间】:2014-10-17 20:56:11
【问题描述】:

尝试从活动返回字节数组时遇到了一些麻烦。返回码是:

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);
...

public void onActivityResult(int requestCode, int resultCode, Intent data) {

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

我在 onActiviyResult 上有一个断点,当我尝试返回一个字节数组时,它永远不会被命中。

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

如果我将 Extra 值更改为“5”(整数),它会返回正常。

我在尝试传回字节数组时是否遗漏了什么?

谢谢

【问题讨论】:

  • 请在第二个活动中发布您如何获取额外内容
  • 这就是问题所在,当传递一个字节数组时,它不会命中第二个活动。如果传递了一个整数,它会这样做。
  • 它可能取决于第二个活动的代码......
  • 我已经添加了代码。 onActivityResult 上有一个断点,当返回一个再见数组时它永远不会被命中,但如果我返回一个整数

标签: android android-intent


【解决方案1】:

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

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

【讨论】:

  • 太好了,这就是问题所在,谢谢!图片太大了。按照您的建议,将图像保存到临时文件然后立即将其读回父活动中的内存时,我是否完全不担心性能?
  • 这就是我在我的应用程序中所做的 :) 只需确保在完成后删除临时文件
【解决方案2】:

我认为您正在从 Fragment 调用 startActivityForResult(i, 255)。

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

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

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

由于托管您的 Fragment 的 Activity 获得 onActivityResult() 结果,因此您需要覆盖 Activity 的 onActivityResult(),请在 Fragment 中调用 super.onActivityResult() 以传播到相应的 Fragment 以获取未处理的结果代码或全部。

【讨论】:

  • ChildActivity 必须调用完成才能将数据传回调用活动。
  • @AesSedai101 ,我很抱歉我之前的回答,我的错误。检查我编辑的答案。
猜你喜欢
  • 1970-01-01
  • 2020-11-17
  • 2010-10-21
  • 2016-05-13
  • 2010-12-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多