From ca60ba1c149f5be850a1a7de3a5f9c54854164a0 Mon Sep 17 00:00:00 2001 From: yihuiyang Date: Tue, 31 Oct 2023 15:32:58 +0800 Subject: [PATCH] =?UTF-8?q?=E8=A7=A3=E5=86=B3StandardMessageCodec=E5=A4=84?= =?UTF-8?q?=E7=90=86null=E5=80=BC=E5=BC=82=E5=B8=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: yihuiyang --- fml/platform/ohos/napi_util.cc | 3 ++ .../plugin/common/StandardMessageCodec.ets | 6 ++-- .../ohos/napi/platform_view_ohos_napi.cpp | 29 ++++++++++--------- 3 files changed, 21 insertions(+), 17 deletions(-) diff --git a/fml/platform/ohos/napi_util.cc b/fml/platform/ohos/napi_util.cc index e08e22f642..e0439f192b 100644 --- a/fml/platform/ohos/napi_util.cc +++ b/fml/platform/ohos/napi_util.cc @@ -220,6 +220,9 @@ napi_value CreateArrayBuffer(napi_env env, void* inputData, size_t dataSize) { void* data = nullptr; napi_value arrayBuffer = nullptr; napi_value result = nullptr; + if (inputData == nullptr) { + return nullptr; + } napi_status status = napi_create_arraybuffer(env, dataSize, &data, &arrayBuffer); if (status) { diff --git a/shell/platform/ohos/flutter_embedding/flutter/src/main/ets/plugin/common/StandardMessageCodec.ets b/shell/platform/ohos/flutter_embedding/flutter/src/main/ets/plugin/common/StandardMessageCodec.ets index 8650cfe643..0f12280e43 100644 --- a/shell/platform/ohos/flutter_embedding/flutter/src/main/ets/plugin/common/StandardMessageCodec.ets +++ b/shell/platform/ohos/flutter_embedding/flutter/src/main/ets/plugin/common/StandardMessageCodec.ets @@ -65,15 +65,15 @@ export default class StandardMessageCodec implements MessageCodec { static INSTANCE = new StandardMessageCodec(); encodeMessage(message: ESObject): ArrayBuffer { - if (message == null) { - return StringUtils.stringToArrayBuffer(""); - } const stream = ByteBuffer.from(new ArrayBuffer(1024)) this.writeValue(stream, message); return stream.buffer } decodeMessage(message: ArrayBuffer): ESObject { + if (message == null) { + return null + } const buffer = ByteBuffer.from(message) return this.readValue(buffer) } diff --git a/shell/platform/ohos/napi/platform_view_ohos_napi.cpp b/shell/platform/ohos/napi/platform_view_ohos_napi.cpp index 61fc94fb21..b4bbe98c3c 100644 --- a/shell/platform/ohos/napi/platform_view_ohos_napi.cpp +++ b/shell/platform/ohos/napi/platform_view_ohos_napi.cpp @@ -287,16 +287,15 @@ void PlatformViewOHOSNapi::FlutterViewHandlePlatformMessage( return; } - if (message->data().GetSize() > 0) { - callbackParam[1] = fml::napi::CreateArrayBuffer( - env_, (void*)message->data().GetMapping(), message->data().GetSize()); - - status = napi_create_int64(env_, reponse_id, &callbackParam[2]); - if (status != napi_ok) { - FML_DLOG(ERROR) << "napi_create_int64 err " << status; - return; - } + callbackParam[1] = fml::napi::CreateArrayBuffer( + env_, (void*)message->data().GetMapping(), message->data().GetSize()); + status = napi_create_int64(env_, reponse_id, &callbackParam[2]); + if (status != napi_ok) { + FML_DLOG(ERROR) << "napi_create_int64 err " << status; + return; + } + if (message->hasData()) { fml::MallocMapping mapping = message->releaseData(); char* mapData = (char*)mapping.Release(); status = napi_create_string_utf8(env_, mapData, strlen(mapData), @@ -309,12 +308,14 @@ void PlatformViewOHOSNapi::FlutterViewHandlePlatformMessage( if (mapData) { delete mapData; } + } else { + callbackParam[3] = nullptr; + } - status = fml::napi::InvokeJsMethod( - env_, ref_napi_obj_, "handlePlatformMessage", 4, callbackParam); - if (status != napi_ok) { - FML_DLOG(ERROR) << "InvokeJsMethod fail "; - } + status = fml::napi::InvokeJsMethod(env_, ref_napi_obj_, + "handlePlatformMessage", 4, callbackParam); + if (status != napi_ok) { + FML_DLOG(ERROR) << "InvokeJsMethod fail "; } } -- Gitee