2017-06-23 6 views
0

現在、私はJavaで書かれたファイルアップローダーモジュールを持っています。私は約束を使用しようとしていますが、このケースでは、操作が完了したときにデータを1回だけ送信できます。現在、私のコード:あなたは、私はすべての準備が整っチェックする必要があり、すべてのケースで見どのようネイティブネイティブモジュールとJavaネイティブモジュール間の通信

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

は何か、このまたは存在していただけrequst応答ソリューションのいずれかの解決策はありますか?

答えて

0

official docをチェックすると、ネイティブ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側でそれを呼び出す:

基本的には次のようにJava側にモジュールを定義します

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

register the moduleすることを忘れないでください。

+0

コードをコピー&ペーストしましたか?これは、ネイティブコードとネイティブコードとの間の通信方法ですが、私の問題ではありません。投稿をお読みください。とにかくありがとうございました。 – PumpkinSeed

+0

申し訳ありませんが、私はあなたの問題を誤解しました。 – Kerumen

関連する問題