本机代码方法 returns 未定义而不是字符串
Native code method returns undefined instead of string
我有一个简单的测试 react-native 项目 运行ning,我想在其中 运行 一些本地代码。我遵循了开发指南,在我的 android 项目中有一个 module
和一个 package
class,并将其链接到 MainApplication
文件中。它们看起来像这样:
包裹:
public class ModulePackage implements ReactPackage {
@NonNull
@Override
public List<NativeModule> createNativeModules(@NonNull ReactApplicationContext reactContext) {
List<NativeModule> modules = new ArrayList<>();
modules.add(new ModuleModule(reactContext));
return modules;
}
@NonNull
@Override
public List<ViewManager> createViewManagers(@NonNull ReactApplicationContext reactContext) {
return Collections.emptyList();
}
}
和模块:
@ReactModule(name = ModuleModule.NAME)
public class ModuleModule extends ReactContextBaseJavaModule {
public static final String NAME = "ModuleModule";
@ReactMethod
public String getData() {
return "AAAAAAAAAAAAAAAAA";
}
}
现在我在javascript中导入模块如下:
const { ModuleModule} = NativeModules;
并且我在行上放置了一个断点,在中断并跨过一次之后加载了模块我进入控制台检查该函数是否存在所以我检查了 ModuleModule
并且它 returned
Object {getData: Function, getConstants: Function}
所以这个功能显然在那里,我只是从来没有得到我期望的 return 值。有人遇到过这样的事情吗?
根据文档,您必须使用 Promise 将数据 return 发送到 JS interface/bridge。
https://reactnative.dev/docs/native-modules-android#promises
您的实现将更改为
@ReactMethod
public void getData(Promise promise) {
promise.resolve("AAAAAAAAAAAAAAAAA");
}
我有一个简单的测试 react-native 项目 运行ning,我想在其中 运行 一些本地代码。我遵循了开发指南,在我的 android 项目中有一个 module
和一个 package
class,并将其链接到 MainApplication
文件中。它们看起来像这样:
包裹:
public class ModulePackage implements ReactPackage {
@NonNull
@Override
public List<NativeModule> createNativeModules(@NonNull ReactApplicationContext reactContext) {
List<NativeModule> modules = new ArrayList<>();
modules.add(new ModuleModule(reactContext));
return modules;
}
@NonNull
@Override
public List<ViewManager> createViewManagers(@NonNull ReactApplicationContext reactContext) {
return Collections.emptyList();
}
}
和模块:
@ReactModule(name = ModuleModule.NAME)
public class ModuleModule extends ReactContextBaseJavaModule {
public static final String NAME = "ModuleModule";
@ReactMethod
public String getData() {
return "AAAAAAAAAAAAAAAAA";
}
}
现在我在javascript中导入模块如下:
const { ModuleModule} = NativeModules;
并且我在行上放置了一个断点,在中断并跨过一次之后加载了模块我进入控制台检查该函数是否存在所以我检查了 ModuleModule
并且它 returned
Object {getData: Function, getConstants: Function}
所以这个功能显然在那里,我只是从来没有得到我期望的 return 值。有人遇到过这样的事情吗?
根据文档,您必须使用 Promise 将数据 return 发送到 JS interface/bridge。 https://reactnative.dev/docs/native-modules-android#promises
您的实现将更改为
@ReactMethod
public void getData(Promise promise) {
promise.resolve("AAAAAAAAAAAAAAAAA");
}