瀏覽代碼

Add progress implementation for android

Ben Hsieh 8 年之前
父節點
當前提交
d41ed22229

+ 4
- 4
src/android/src/main/java/com/RNFetchBlob/RNFetchBlob.java 查看文件

@@ -41,7 +41,7 @@ public class RNFetchBlob extends ReactContextBaseJavaModule {
41 41
     }
42 42
 
43 43
     @ReactMethod
44
-    public void fetchBlob(String method, String url, ReadableMap headers, String body, final Callback callback) {
44
+    public void fetchBlob(String taskId, String method, String url, ReadableMap headers, String body, final Callback callback) {
45 45
 
46 46
         try {
47 47
             Uri uri = Uri.parse(url);
@@ -71,7 +71,7 @@ public class RNFetchBlob extends ReactContextBaseJavaModule {
71 71
             }
72 72
 
73 73
             // create handler
74
-            AsyncHttpResponseHandler handler = new RNFetchBlobHandler(callback);
74
+            AsyncHttpResponseHandler handler = new RNFetchBlobHandler(this.getReactApplicationContext(), taskId, callback);
75 75
 
76 76
             // send request
77 77
             switch(method.toLowerCase()) {
@@ -95,7 +95,7 @@ public class RNFetchBlob extends ReactContextBaseJavaModule {
95 95
     }
96 96
 
97 97
     @ReactMethod
98
-    public void fetchBlobForm(String method, String url, ReadableMap headers, ReadableArray body, final Callback callback) {
98
+    public void fetchBlobForm(String taskId, String method, String url, ReadableMap headers, ReadableArray body, final Callback callback) {
99 99
 
100 100
         try {
101 101
             Uri uri = Uri.parse(url);
@@ -156,7 +156,7 @@ public class RNFetchBlob extends ReactContextBaseJavaModule {
156 156
             }
157 157
 
158 158
             // create handler
159
-            AsyncHttpResponseHandler handler = new RNFetchBlobHandler(callback);
159
+            AsyncHttpResponseHandler handler = new RNFetchBlobHandler(this.getReactApplicationContext(), taskId, callback);
160 160
 
161 161
             // send request
162 162
             switch(method.toLowerCase()) {

+ 20
- 1
src/android/src/main/java/com/RNFetchBlob/RNFetchBlobHandler.java 查看文件

@@ -1,6 +1,10 @@
1 1
 package com.RNFetchBlob;
2 2
 
3 3
 import com.facebook.react.bridge.Callback;
4
+import com.facebook.react.bridge.WritableMap;
5
+import com.facebook.react.bridge.Arguments;
6
+import com.facebook.react.bridge.ReactContext;
7
+import com.facebook.react.modules.core.DeviceEventManagerModule;
4 8
 import com.loopj.android.http.AsyncHttpResponseHandler;
5 9
 import com.loopj.android.http.Base64;
6 10
 
@@ -9,9 +13,14 @@ import cz.msebera.android.httpclient.Header;
9 13
 public class RNFetchBlobHandler extends AsyncHttpResponseHandler {
10 14
 
11 15
     Callback onResponse;
16
+    ReactContext mCtx;
17
+    String mTaskId;
18
+
19
+    RNFetchBlobHandler(ReactContext ctx, String taskId, Callback onResponse) {
12 20
 
13
-    RNFetchBlobHandler(Callback onResponse) {
14 21
         this.onResponse = onResponse;
22
+        this.mTaskId = taskId;
23
+        this.mCtx = ctx;
15 24
     }
16 25
 
17 26
     @Override
@@ -23,6 +32,16 @@ public class RNFetchBlobHandler extends AsyncHttpResponseHandler {
23 32
     @Override
24 33
     public void onProgress(long bytesWritten, long totalSize) {
25 34
         super.onProgress(bytesWritten, totalSize);
35
+
36
+        // on progress, emit RNFetchBlobProgress event with ticketId, bytesWritten, and totalSize
37
+        WritableMap args = Arguments.createMap();
38
+        args.putString("taskId", this.mTaskId);
39
+        args.putString("written", String.valueOf(bytesWritten));
40
+        args.putString("total", String.valueOf(totalSize));
41
+
42
+        // emit event to js context
43
+        this.mCtx.getJSModule(DeviceEventManagerModule.RCTDeviceEventEmitter.class)
44
+                 .emit("RNFetchBlobProgress" + this.mTaskId, args);
26 45
     }
27 46
 
28 47
     @Override