浏览代码

Add progress implementation for android

Ben Hsieh 9 年前
父节点
当前提交
d41ed22229

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

41
     }
41
     }
42
 
42
 
43
     @ReactMethod
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
         try {
46
         try {
47
             Uri uri = Uri.parse(url);
47
             Uri uri = Uri.parse(url);
71
             }
71
             }
72
 
72
 
73
             // create handler
73
             // create handler
74
-            AsyncHttpResponseHandler handler = new RNFetchBlobHandler(callback);
74
+            AsyncHttpResponseHandler handler = new RNFetchBlobHandler(this.getReactApplicationContext(), taskId, callback);
75
 
75
 
76
             // send request
76
             // send request
77
             switch(method.toLowerCase()) {
77
             switch(method.toLowerCase()) {
95
     }
95
     }
96
 
96
 
97
     @ReactMethod
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
         try {
100
         try {
101
             Uri uri = Uri.parse(url);
101
             Uri uri = Uri.parse(url);
156
             }
156
             }
157
 
157
 
158
             // create handler
158
             // create handler
159
-            AsyncHttpResponseHandler handler = new RNFetchBlobHandler(callback);
159
+            AsyncHttpResponseHandler handler = new RNFetchBlobHandler(this.getReactApplicationContext(), taskId, callback);
160
 
160
 
161
             // send request
161
             // send request
162
             switch(method.toLowerCase()) {
162
             switch(method.toLowerCase()) {

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

1
 package com.RNFetchBlob;
1
 package com.RNFetchBlob;
2
 
2
 
3
 import com.facebook.react.bridge.Callback;
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
 import com.loopj.android.http.AsyncHttpResponseHandler;
8
 import com.loopj.android.http.AsyncHttpResponseHandler;
5
 import com.loopj.android.http.Base64;
9
 import com.loopj.android.http.Base64;
6
 
10
 
9
 public class RNFetchBlobHandler extends AsyncHttpResponseHandler {
13
 public class RNFetchBlobHandler extends AsyncHttpResponseHandler {
10
 
14
 
11
     Callback onResponse;
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
         this.onResponse = onResponse;
21
         this.onResponse = onResponse;
22
+        this.mTaskId = taskId;
23
+        this.mCtx = ctx;
15
     }
24
     }
16
 
25
 
17
     @Override
26
     @Override
23
     @Override
32
     @Override
24
     public void onProgress(long bytesWritten, long totalSize) {
33
     public void onProgress(long bytesWritten, long totalSize) {
25
         super.onProgress(bytesWritten, totalSize);
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
     @Override
47
     @Override