diff --git a/frameworks/ets/ani/include/sts_common.h b/frameworks/ets/ani/include/sts_common.h index dfc0799de57b69a716ddea267cc053b9d3266d9a..4478ffcc56f4216554cf9e107e38a948c345bb08 100644 --- a/frameworks/ets/ani/include/sts_common.h +++ b/frameworks/ets/ani/include/sts_common.h @@ -70,6 +70,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 b6efeceabd55fd488642fef6d6a7c76e9b55a238..69eaaeae37af17e4a46a5dec8d843b3c2bae65cc 100644 --- a/frameworks/ets/ani/src/sts_common.cpp +++ b/frameworks/ets/ani/src/sts_common.cpp @@ -506,6 +506,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()));