[英]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.