diff --git a/frameworks/ets/ani/include/sts_common.h b/frameworks/ets/ani/include/sts_common.h index 7e0bc38275f1dcd488b0c0ea53752b0e79b69a93..4817b0626a4106292375ca3127a48dad8aa411ae 100644 --- a/frameworks/ets/ani/include/sts_common.h +++ b/frameworks/ets/ani/include/sts_common.h @@ -73,6 +73,7 @@ void GetPropertyRefValue(ani_env *env, ani_object obj, const char *name, ani_boo bool SetFieldString(ani_env *env, ani_class cls, ani_object &object, const std::string fieldName, const std::string value); +bool SetFieldInt(ani_env *env, ani_class cls, ani_object &object, const std::string fieldName, const int32_t value); bool SetOptionalFieldBoolean(ani_env *env, ani_class cls, ani_object &object, const std::string fieldName, bool value); bool SetOptionalFieldDouble(ani_env *env, ani_class cls, ani_object &object, diff --git a/frameworks/ets/ani/src/sts_common.cpp b/frameworks/ets/ani/src/sts_common.cpp index 74ef991a67f7ce721840f5501e3257b1565bbd4d..e09939f7c715cc1ad0001c719ce9d1b09a0de982 100644 --- a/frameworks/ets/ani/src/sts_common.cpp +++ b/frameworks/ets/ani/src/sts_common.cpp @@ -500,6 +500,27 @@ bool SetFieldString(ani_env *env, ani_class cls, ani_object &object, return true; } +bool SetFieldInt(ani_env *env, ani_class cls, ani_object &object, + const std::string fieldName, const int32_t value) +{ + if (env == nullptr || cls == nullptr || object == nullptr || fieldName.empty()) { + ANS_LOGE("SetFieldInt fail. has nullptr or fieldName is empty"); + return false; + } + ani_field field = nullptr; + ani_status status = env->Class_FindField(cls, fieldName.c_str(), &field); + ANS_LOGD("SetFieldInt fieldName : %{public}s", fieldName.c_str()); + if (status != ANI_OK || field == nullptr) { + ANS_LOGE("Class_FindField fail. status : %{public}d", status); + return false; + } + if ((status = env->Object_SetField_Int(object, field, static_cast(value))) != ANI_OK) { + ANS_LOGE("Object_SetField_Int fail. status : %{public}d", status); + return false; + } + return true; +} + bool SetOptionalFieldBoolean(ani_env *env, ani_class cls, ani_object &object, const std::string fieldName, bool value) { diff --git a/frameworks/ets/ani/src/sts_subscriber.cpp b/frameworks/ets/ani/src/sts_subscriber.cpp index 60d749f07e25aee2c93615558521a9d3579b3f95..132a2145b2e312133583493dd51a145dad20d0f1 100644 --- a/frameworks/ets/ani/src/sts_subscriber.cpp +++ b/frameworks/ets/ani/src/sts_subscriber.cpp @@ -257,12 +257,12 @@ bool WarpBadgeNumberCallbackData( ANS_LOGE("SetFieldString bundle faild"); return false; } - if (!CallSetter(env, cls, outObj, "uid", static_cast(badgeData->GetUid()))) { - ANS_LOGE("uid set faild."); + if (!SetFieldInt(env, cls, outObj, "uid", badgeData->GetUid())) { + ANS_LOGE("SetFieldInt uid faild"); return false; } - if (!CallSetter(env, cls, outObj, "badgeNumber", static_cast(badgeData->GetBadgeNumber()))) { - ANS_LOGE("badgeNumber set faild"); + if (!SetFieldInt(env, cls, outObj, "badgeNumber", badgeData->GetBadgeNumber())) { + ANS_LOGE("SetFieldInt badgeNumber faild"); return false; } instanceKeyObj = CreateInt(env, static_cast(badgeData->GetInstanceKey()));