簡體   English   中英

React Native和Java本機模塊之間的通信

[英]Communication between React Native and Java native module

目前,我有一個用Java編寫的文件上傳器模塊。 我正在嘗試使用Promise,但是在這種情況下,操作完成后只能發送一次數據。 我的代碼當前:

if (FileType.MESH_OBJ.equalsName(filename)) {
  uploadHandler = new UploadFileTask() {
    @Override
    protected void onPostExecute(JSONObject jsonObject) {
      objReady = true;
      Log.d(appName, "Upload done: object");
      if (objReady == true && imgReady == true && mtlReady == true && jpegReady == true) {
        promise.resolve("finish");
      }
    }
  };
} else if (FileType.PREVIEW_IMAGE.equalsName(filename)) {
  uploadHandler = new UploadFileTask() {
    @Override
    protected void onPostExecute(JSONObject jsonObject) {
      imgReady = true;
      Log.d(appName, "Upload done: image");
      if (objReady == true && imgReady == true && mtlReady == true && jpegReady == true) {
        promise.resolve("finish");
      }
    }
  };
}

您如何看待每種情況,我都必須檢查一切是否就緒。 最好以某種方式進行以下操作:每當上載內容時,都會向React Native發送響應。 在JS端,我使用.then()進行如下處理:

FileHandler.upload(...).then(...)

有什么解決方案或僅存在請求響應解決方案嗎?

您可以查看用於創建本機Java模塊的官方文檔

基本上,您將像下面這樣在Java端定義模塊:

public class FileHandler extends ReactContextBaseJavaModule {

  @Override
  public String getName() {
    return "FileHandler";
  }

  @ReactMethod
  public void upload(String fileName, Promise promise) {
    if (FileType.MESH_OBJ.equalsName(filename)) {
      uploadHandler = new UploadFileTask() {
        @Override
        protected void onPostExecute(JSONObject jsonObject) {
          objReady = true;
          Log.d(appName, "Upload done: object");
          if (objReady == true && imgReady == true && mtlReady == true && jpegReady == true) {
            promise.resolve("finish");
          }
        }
      };
    } else if (FileType.PREVIEW_IMAGE.equalsName(filename)) {
      uploadHandler = new UploadFileTask() {
        @Override
        protected void onPostExecute(JSONObject jsonObject) {
          imgReady = true;
          Log.d(appName, "Upload done: image");
          if (objReady == true && imgReady == true && mtlReady == true && jpegReady == true) {
            promise.resolve("finish");
          }
        }
      };
    }
  }
}

並在JavaScript端調用它:

import { NativeModules } from 'react-native';
NativeModules.FileHandler.upload(...).then(...)

不要忘記注冊模塊

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM