sta*_*ner 12 android react-native
我想在reactNative Android应用程序中从@ReactMethod返回一个布尔值.
但是当我制作类似的方法时
@ReactMethod
public boolean retBoolean() {
return true;
}
Run Code Online (Sandbox Code Playgroud)
并从JS组件调用它,它返回undefined.只有当返回类型为void函数被调用时,我才能返回字符串或布尔值.
Jic*_*son 20
根据反应文件
要向JavaScript公开方法,必须使用@ReactMethod注释Java方法.桥接方法的返回类型始终无效.React Native桥是异步的,因此将结果传递给JavaScript的唯一方法是使用回调或发出事件
所以如果你想返回像布尔值或字符串这样的值,你需要使用回调.
例:
@ReactMethod
public void isEqual(
int a,
int b,
Callback booleanCallback) {
boolean equal= a == b;
booleanCallback.invoke(equal);
}
Run Code Online (Sandbox Code Playgroud)
在javascript调用如下...
YourClass.isEqual(
5,
10,
(status) => {
console.log('Result ',status);
}
);
Run Code Online (Sandbox Code Playgroud)
有关更多信息,请参阅此
Mic*_* T. 14
您也可以使用,而不是使用回调Promise
.
import com.facebook.react.bridge.Promise;
@ReactMethod
public void hasFlash(final Promise promise) {
Camera camera = RCTCamera.getInstance().acquireCameraInstance();
if (null == camera) {
promise.reject("No camera found.");
return;
}
List<String> flashModes = camera.getParameters().getSupportedFlashModes();
promise.resolve(null != flashModes && !flashModes.isEmpty());
}
Run Code Online (Sandbox Code Playgroud)
然后在你的JS中,调用它
const myFunction = async () => {
const hasFlash = await CameraManager.hasFlash();
}
Run Code Online (Sandbox Code Playgroud)