2016-05-16 37 views
7

Tôi muốn trả lại Boolean từ @ReactMethod trong ứng dụng phản ứng Android.Cách trả về Boolean từ @ReactMethod trong React Native?

Nhưng khi tôi thực hiện phương pháp tương tự để

@ReactMethod 
public boolean retBoolean() { 
return true; 
} 

và gọi nó là từ thành phần JS, nó sẽ trả không xác định. chỉ khi kiểu trả về là hàm void được gọi, tôi không thể trả về chuỗi hoặc boolean.

Trả lời

13

Theo phản ứng tài liệu

Để phơi bày một phương pháp để Javascript một phương pháp Java phải được chú thích bằng @ReactMethod. Kiểu trả về của các phương thức bridge luôn là void. Cầu phản ứng gốc không đồng bộ, do đó, cách duy nhất để chuyển kết quả đến JavaScript là sử dụng gọi lại hoặc phát ra sự kiện

Vì vậy, nếu bạn muốn trả về một số giá trị như boolean hoặc chuỗi bạn cần sử dụng gọi lại.

Ví dụ:

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

Trong javascript gọi như dưới đây ...

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

Để biết thêm thông tham khảo this

2

Thay vì sử dụng gọi lại, bạn cũng có thể sử dụng 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()); 
} 

Sau đó, trong JS của bạn, gọi nó với

const myFunction = async() => { 
    const hasFlash = await CameraManager.hasFlash(); 
} 
+0

này có vẻ là giải pháp tốt nhất –

+0

Oh Vậy làm thế nào để gọi chức năng trở lại trong javascript và nhận được trở lại giá trị tại quê hương android ? –

Các vấn đề liên quan