React-Native和Java-Native模块之间的通信

React-Native和Java-Native模块之间的通信,java,android,react-native,promise,Java,Android,React Native,Promise,目前我有一个用Java编写的文件上传模块。我试图使用promise,但在这种情况下,当操作完成时,我只能发送一次数据。我的代码当前为: if (FileType.MESH_OBJ.equalsName(filename)) { uploadHandler = new UploadFileTask() { @Override protected void onPostExecute(JSONObject jsonObject) { objReady = true;

目前我有一个用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端,我使用
处理它。然后()
如下所示:

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(...)

别忘了。

您复制并粘贴了我的代码了吗?这是如何在本机代码和react本机代码之间进行通信的答案,但不是针对我的问题。请看这篇文章。无论如何,谢谢你。对不起,我误解了你的问题。