weex [Android] 0.28.0源码 调用 fireEvent(..., EventResult callback),无回调或仅有一次回调

x8goxv8g  于 9个月前  发布在  Weex
关注(0)|答案(1)|浏览(127)

问题是因为在 script_bridge_in_multi_process.cppstd::unique_ptr<IPCResult> OnReceivedResult(IPCArguments *arguments) 方法中,获取 callback_id 的方式 long callback_id = arguments->get<long>(0); 总返回 1或0,导致java层找不到对应的回调监听。
详情如下:

  1. std::unique_ptr<IPCResult> OnReceivedResult(IPCArguments *arguments) {
  2. /**
  3. * START
  4. * 2021/06/16
  5. * 原代码 long callback_id = arguments->get<long>(0); 总返回 1或0
  6. * 导致java层找不到对应的回调监听
  7. */
  8. const char *callback_id_str = getArumentAsCStr(arguments, 0);
  9. long callback_id;
  10. sscanf(callback_id_str,"%ld",&callback_id);
  11. /**
  12. * END
  13. */
  14. std::unique_ptr<WeexJSResult> result;
  15. result.reset(new WeexJSResult);
  16. if (arguments->getCount() > 1 && arguments->getType(1) == IPCType::BYTEARRAY &&
  17. arguments->getByteArray(1)->length > 0) {
  18. result->length = arguments->getByteArray(1)->length;
  19. char *string = new char[result->length + 1];
  20. result->data.reset(string);
  21. memset(string, 0, result->length);
  22. memcpy(string, arguments->getByteArray(1)->content, result->length);
  23. string[result->length] = '\0';
  24. }
  25. WeexCoreManager::Instance()->script_thread()->message_loop()->PostTask(
  26. weex::base::MakeCopyable([callback_id, result = std::move(result)]() {
  27. WeexCoreManager::Instance()
  28. ->script_bridge()
  29. ->core_side()
  30. ->OnReceivedResult(
  31. callback_id,
  32. const_cast<std::unique_ptr<WeexJSResult> &>(result));
  33. }));
  34. return createInt32Result(static_cast<int32_t>(true));
  35. }
tf7tbtn2

tf7tbtn21#

在合并安卓代码时,同步修改掉 #3225

相关问题