如何从React Native中的@ReactMethod返回一个布尔值?

时间:2016-05-16 11:13:18

标签: android react-native

我想在reactNative Android应用程序中从@ReactMethod返回一个布尔值。

但是当我制作类似于

的方法时
@ReactMethod
public boolean retBoolean() {
return true;
}

并从JS组件调用它,它返回undefined。 只有当返回类型为void函数被调用时,我才能返回字符串或布尔值。

2 个答案:

答案 0 :(得分:18)

根据反应文件

  

要向JavaScript公开方法,必须使用@ReactMethod注释Java方法。桥接方法的返回类型始终无效。 React Native桥是异步的,因此将结果传递给JavaScript的唯一方法是使用回调或发出事件

因此,如果你想返回一些像boolean或string这样的值,你需要使用回调。

示例:

@ReactMethod
public void isEqual(
        int a,
        int b,
        Callback booleanCallback) {
    boolean equal= a == b;
    booleanCallback.invoke(equal);
}

在下面的javascript调用中......

YourClass.isEqual(
 5,
 10,
 (status) => {
  console.log('Result ',status);
 }
);

有关详细信息,请参阅this

答案 1 :(得分:12)

您也可以使用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());
}

然后在你的JS中,用

调用它
const myFunction = async () => { 
    const hasFlash = await CameraManager.hasFlash(); 
}