From 274a4bd797ff7b2a3ccacb82f249850410c06234 Mon Sep 17 00:00:00 2001 From: amitshekhariitbhu Date: Tue, 9 Jan 2018 12:34:34 +0530 Subject: [PATCH 01/20] Add test for Object Single Multipart request --- .../Rx2MultipartObjectApiTest.java | 94 +++++++++++++++++++ 1 file changed, 94 insertions(+) diff --git a/rx2-android-networking/src/androidTest/java/com/rx2androidnetworking/Rx2MultipartObjectApiTest.java b/rx2-android-networking/src/androidTest/java/com/rx2androidnetworking/Rx2MultipartObjectApiTest.java index ae74aa5c..b50cb7ff 100644 --- a/rx2-android-networking/src/androidTest/java/com/rx2androidnetworking/Rx2MultipartObjectApiTest.java +++ b/rx2-android-networking/src/androidTest/java/com/rx2androidnetworking/Rx2MultipartObjectApiTest.java @@ -33,7 +33,9 @@ import java.util.concurrent.atomic.AtomicReference; import io.reactivex.Observer; +import io.reactivex.SingleObserver; import io.reactivex.android.schedulers.AndroidSchedulers; +import io.reactivex.annotations.NonNull; import io.reactivex.disposables.Disposable; import io.reactivex.schedulers.Schedulers; import okhttp3.mockwebserver.MockResponse; @@ -111,6 +113,49 @@ public void onComplete() { assertEquals("Shekhar", lastNameRef.get()); } + public void testObjectSingleMultipartRequest() throws InterruptedException { + + server.enqueue(new MockResponse().setBody("{\"firstName\":\"Amit\", \"lastName\":\"Shekhar\"}")); + + final AtomicReference firstNameRef = new AtomicReference<>(); + final AtomicReference lastNameRef = new AtomicReference<>(); + final AtomicReference isSubscribedRef = new AtomicReference<>(); + final CountDownLatch latch = new CountDownLatch(1); + + Rx2AndroidNetworking.upload(server.url("/").toString()) + .addMultipartParameter("key", "value") + .build() + .getObjectSingle(User.class) + .subscribeOn(Schedulers.io()) + .observeOn(AndroidSchedulers.mainThread()) + .subscribe(new SingleObserver() { + @Override + public void onSubscribe(@NonNull Disposable disposable) { + isSubscribedRef.set(true); + } + + @Override + public void onSuccess(@NonNull User user) { + firstNameRef.set(user.firstName); + lastNameRef.set(user.lastName); + latch.countDown(); + } + + @Override + public void onError(@NonNull Throwable throwable) { + assertTrue(false); + } + }); + + + assertTrue(latch.await(2, SECONDS)); + + assertTrue(isSubscribedRef.get()); + + assertEquals("Amit", firstNameRef.get()); + assertEquals("Shekhar", lastNameRef.get()); + } + public void testObjectMultipartRequest404() throws InterruptedException { server.enqueue(new MockResponse().setResponseCode(404).setBody("data")); @@ -165,6 +210,55 @@ public void onComplete() { } + public void testObjectSingleMultipartRequest404() throws InterruptedException { + + server.enqueue(new MockResponse().setResponseCode(404).setBody("data")); + + final AtomicReference errorDetailRef = new AtomicReference<>(); + final AtomicReference errorBodyRef = new AtomicReference<>(); + final AtomicReference errorCodeRef = new AtomicReference<>(); + final AtomicReference isSubscribedRef = new AtomicReference<>(); + final CountDownLatch latch = new CountDownLatch(1); + + Rx2AndroidNetworking.upload(server.url("/").toString()) + .addMultipartParameter("key", "value") + .build() + .getObjectSingle(User.class) + .subscribeOn(Schedulers.io()) + .observeOn(AndroidSchedulers.mainThread()) + .subscribe(new SingleObserver() { + @Override + public void onSubscribe(@NonNull Disposable disposable) { + isSubscribedRef.set(true); + } + + @Override + public void onSuccess(@NonNull User user) { + assertTrue(false); + } + + @Override + public void onError(@NonNull Throwable e) { + ANError anError = (ANError) e; + errorBodyRef.set(anError.getErrorBody()); + errorDetailRef.set(anError.getErrorDetail()); + errorCodeRef.set(anError.getErrorCode()); + latch.countDown(); + } + }); + + assertTrue(latch.await(2, SECONDS)); + + assertTrue(isSubscribedRef.get()); + + assertEquals(ANConstants.RESPONSE_FROM_SERVER_ERROR, errorDetailRef.get()); + + assertEquals("data", errorBodyRef.get()); + + assertEquals(404, errorCodeRef.get().intValue()); + + } + public void testObjectListMultipartRequest() throws InterruptedException { server.enqueue(new MockResponse().setBody("[{\"firstName\":\"Amit\", \"lastName\":\"Shekhar\"}]")); From 4be8817d218a561551c7311aabb686a4cb22f81b Mon Sep 17 00:00:00 2001 From: amitshekhariitbhu Date: Wed, 10 Jan 2018 11:04:50 +0530 Subject: [PATCH 02/20] Add test for ObjectList Single Multipart request --- .../Rx2MultipartObjectApiTest.java | 91 +++++++++++++++++++ 1 file changed, 91 insertions(+) diff --git a/rx2-android-networking/src/androidTest/java/com/rx2androidnetworking/Rx2MultipartObjectApiTest.java b/rx2-android-networking/src/androidTest/java/com/rx2androidnetworking/Rx2MultipartObjectApiTest.java index b50cb7ff..407a1bf7 100644 --- a/rx2-android-networking/src/androidTest/java/com/rx2androidnetworking/Rx2MultipartObjectApiTest.java +++ b/rx2-android-networking/src/androidTest/java/com/rx2androidnetworking/Rx2MultipartObjectApiTest.java @@ -310,6 +310,48 @@ public void onComplete() { assertEquals("Shekhar", lastNameRef.get()); } + public void testObjectListSingleMultipartRequest() throws InterruptedException { + + server.enqueue(new MockResponse().setBody("[{\"firstName\":\"Amit\", \"lastName\":\"Shekhar\"}]")); + + final AtomicReference firstNameRef = new AtomicReference<>(); + final AtomicReference lastNameRef = new AtomicReference<>(); + final AtomicReference isSubscribedRef = new AtomicReference<>(); + final CountDownLatch latch = new CountDownLatch(1); + + Rx2AndroidNetworking.upload(server.url("/").toString()) + .addMultipartParameter("key", "value") + .build() + .getObjectListSingle(User.class) + .subscribeOn(Schedulers.io()) + .observeOn(AndroidSchedulers.mainThread()) + .subscribe(new SingleObserver>() { + @Override + public void onSubscribe(@NonNull Disposable disposable) { + isSubscribedRef.set(true); + } + + @Override + public void onSuccess(@NonNull List userList) { + firstNameRef.set(userList.get(0).firstName); + lastNameRef.set(userList.get(0).lastName); + latch.countDown(); + } + + @Override + public void onError(@NonNull Throwable throwable) { + assertTrue(false); + } + }); + + assertTrue(latch.await(2, SECONDS)); + + assertTrue(isSubscribedRef.get()); + + assertEquals("Amit", firstNameRef.get()); + assertEquals("Shekhar", lastNameRef.get()); + } + public void testObjectListMultipartRequest404() throws InterruptedException { server.enqueue(new MockResponse().setResponseCode(404).setBody("data")); @@ -363,4 +405,53 @@ public void onComplete() { assertEquals(404, errorCodeRef.get().intValue()); } + + public void testObjectListSingleMultipartRequest404() throws InterruptedException { + + server.enqueue(new MockResponse().setResponseCode(404).setBody("data")); + + final AtomicReference errorDetailRef = new AtomicReference<>(); + final AtomicReference errorBodyRef = new AtomicReference<>(); + final AtomicReference errorCodeRef = new AtomicReference<>(); + final AtomicReference isSubscribedRef = new AtomicReference<>(); + final CountDownLatch latch = new CountDownLatch(1); + + Rx2AndroidNetworking.upload(server.url("/").toString()) + .addMultipartParameter("key", "value") + .build() + .getObjectListSingle(User.class) + .subscribeOn(Schedulers.io()) + .observeOn(AndroidSchedulers.mainThread()) + .subscribe(new SingleObserver>() { + @Override + public void onSubscribe(@NonNull Disposable disposable) { + isSubscribedRef.set(true); + } + + @Override + public void onSuccess(@NonNull List users) { + assertTrue(false); + } + + @Override + public void onError(@NonNull Throwable e) { + ANError anError = (ANError) e; + errorBodyRef.set(anError.getErrorBody()); + errorDetailRef.set(anError.getErrorDetail()); + errorCodeRef.set(anError.getErrorCode()); + latch.countDown(); + } + }); + + assertTrue(latch.await(2, SECONDS)); + + assertTrue(isSubscribedRef.get()); + + assertEquals(ANConstants.RESPONSE_FROM_SERVER_ERROR, errorDetailRef.get()); + + assertEquals("data", errorBodyRef.get()); + + assertEquals(404, errorCodeRef.get().intValue()); + + } } From 966ad144ee18a0eb7f2d966baa5b904cac0bf46c Mon Sep 17 00:00:00 2001 From: amitshekhariitbhu Date: Fri, 12 Jan 2018 11:55:40 +0530 Subject: [PATCH 03/20] Add test for String Single Multipart request --- .../Rx2MultipartStringApiTest.java | 92 ++++++++++++++++++- 1 file changed, 91 insertions(+), 1 deletion(-) diff --git a/rx2-android-networking/src/androidTest/java/com/rx2androidnetworking/Rx2MultipartStringApiTest.java b/rx2-android-networking/src/androidTest/java/com/rx2androidnetworking/Rx2MultipartStringApiTest.java index dc9fb6eb..8a82fbef 100644 --- a/rx2-android-networking/src/androidTest/java/com/rx2androidnetworking/Rx2MultipartStringApiTest.java +++ b/rx2-android-networking/src/androidTest/java/com/rx2androidnetworking/Rx2MultipartStringApiTest.java @@ -31,7 +31,9 @@ import java.util.concurrent.atomic.AtomicReference; import io.reactivex.Observer; +import io.reactivex.SingleObserver; import io.reactivex.android.schedulers.AndroidSchedulers; +import io.reactivex.annotations.NonNull; import io.reactivex.disposables.Disposable; import io.reactivex.schedulers.Schedulers; import okhttp3.mockwebserver.MockResponse; @@ -105,7 +107,46 @@ public void onComplete() { assertEquals("data", responseRef.get()); } - public void testStringPostRequest404() throws InterruptedException { + public void testStringSingleMultipartRequest() throws InterruptedException { + + server.enqueue(new MockResponse().setBody("data")); + + final AtomicReference responseRef = new AtomicReference<>(); + final AtomicReference isSubscribedRef = new AtomicReference<>(); + final CountDownLatch latch = new CountDownLatch(1); + + Rx2AndroidNetworking.upload(server.url("/").toString()) + .addMultipartParameter("key", "value") + .build() + .getStringSingle() + .subscribeOn(Schedulers.io()) + .observeOn(AndroidSchedulers.mainThread()) + .subscribe(new SingleObserver() { + @Override + public void onSubscribe(@NonNull Disposable disposable) { + isSubscribedRef.set(true); + } + + @Override + public void onSuccess(@NonNull String response) { + responseRef.set(response); + latch.countDown(); + } + + @Override + public void onError(@NonNull Throwable throwable) { + assertTrue(false); + } + }); + + assertTrue(latch.await(2, SECONDS)); + + assertTrue(isSubscribedRef.get()); + + assertEquals("data", responseRef.get()); + } + + public void testStringMultipartRequest404() throws InterruptedException { server.enqueue(new MockResponse().setResponseCode(404).setBody("data")); @@ -159,4 +200,53 @@ public void onComplete() { } + public void testStringSingleMultipartRequest404() throws InterruptedException { + + server.enqueue(new MockResponse().setResponseCode(404).setBody("data")); + + final AtomicReference errorDetailRef = new AtomicReference<>(); + final AtomicReference errorBodyRef = new AtomicReference<>(); + final AtomicReference errorCodeRef = new AtomicReference<>(); + final AtomicReference isSubscribedRef = new AtomicReference<>(); + final CountDownLatch latch = new CountDownLatch(1); + + Rx2AndroidNetworking.upload(server.url("/").toString()) + .addMultipartParameter("key", "value") + .build() + .getStringSingle() + .subscribeOn(Schedulers.io()) + .observeOn(AndroidSchedulers.mainThread()) + .subscribe(new SingleObserver() { + @Override + public void onSubscribe(@NonNull Disposable disposable) { + isSubscribedRef.set(true); + } + + @Override + public void onSuccess(@NonNull String s) { + assertTrue(false); + } + + @Override + public void onError(@NonNull Throwable e) { + ANError anError = (ANError) e; + errorBodyRef.set(anError.getErrorBody()); + errorDetailRef.set(anError.getErrorDetail()); + errorCodeRef.set(anError.getErrorCode()); + latch.countDown(); + } + }); + + assertTrue(latch.await(2, SECONDS)); + + assertTrue(isSubscribedRef.get()); + + assertEquals(ANConstants.RESPONSE_FROM_SERVER_ERROR, errorDetailRef.get()); + + assertEquals("data", errorBodyRef.get()); + + assertEquals(404, errorCodeRef.get().intValue()); + + } + } \ No newline at end of file From d35d9374a025dede22eda2e15fc813ac3442c938 Mon Sep 17 00:00:00 2001 From: amitshekhariitbhu Date: Sat, 13 Jan 2018 18:59:44 +0530 Subject: [PATCH 04/20] Add test for JSONObject Single POST request --- .../Rx2PostJSONApiTest.java | 99 +++++++++++++++++++ 1 file changed, 99 insertions(+) diff --git a/rx2-android-networking/src/androidTest/java/com/rx2androidnetworking/Rx2PostJSONApiTest.java b/rx2-android-networking/src/androidTest/java/com/rx2androidnetworking/Rx2PostJSONApiTest.java index b3caebc1..f3ad2963 100644 --- a/rx2-android-networking/src/androidTest/java/com/rx2androidnetworking/Rx2PostJSONApiTest.java +++ b/rx2-android-networking/src/androidTest/java/com/rx2androidnetworking/Rx2PostJSONApiTest.java @@ -34,7 +34,9 @@ import java.util.concurrent.atomic.AtomicReference; import io.reactivex.Observer; +import io.reactivex.SingleObserver; import io.reactivex.android.schedulers.AndroidSchedulers; +import io.reactivex.annotations.NonNull; import io.reactivex.disposables.Disposable; import io.reactivex.schedulers.Schedulers; import okhttp3.mockwebserver.MockResponse; @@ -116,6 +118,53 @@ public void onComplete() { assertEquals("Shekhar", lastNameRef.get()); } + public void testJSONObjectSinglePostRequest() throws InterruptedException { + + server.enqueue(new MockResponse().setBody("{\"firstName\":\"Amit\", \"lastName\":\"Shekhar\"}")); + + final AtomicReference firstNameRef = new AtomicReference<>(); + final AtomicReference lastNameRef = new AtomicReference<>(); + final AtomicReference isSubscribedRef = new AtomicReference<>(); + final CountDownLatch latch = new CountDownLatch(1); + + Rx2AndroidNetworking.post(server.url("/").toString()) + .addBodyParameter("fistName", "Amit") + .addBodyParameter("lastName", "Shekhar") + .build() + .getJSONObjectSingle() + .subscribeOn(Schedulers.io()) + .observeOn(AndroidSchedulers.mainThread()) + .subscribe(new SingleObserver() { + @Override + public void onSubscribe(@NonNull Disposable disposable) { + isSubscribedRef.set(true); + } + + @Override + public void onSuccess(@NonNull JSONObject response) { + try { + firstNameRef.set(response.getString("firstName")); + lastNameRef.set(response.getString("lastName")); + latch.countDown(); + } catch (JSONException e) { + assertTrue(false); + } + } + + @Override + public void onError(@NonNull Throwable throwable) { + assertTrue(false); + } + }); + + assertTrue(latch.await(2, SECONDS)); + + assertTrue(isSubscribedRef.get()); + + assertEquals("Amit", firstNameRef.get()); + assertEquals("Shekhar", lastNameRef.get()); + } + public void testJSONObjectPostRequest404() throws InterruptedException { server.enqueue(new MockResponse().setResponseCode(404).setBody("data")); @@ -171,6 +220,56 @@ public void onComplete() { } + public void testJSONObjectSinglePostRequest404() throws InterruptedException { + + server.enqueue(new MockResponse().setResponseCode(404).setBody("data")); + + final AtomicReference errorDetailRef = new AtomicReference<>(); + final AtomicReference errorBodyRef = new AtomicReference<>(); + final AtomicReference errorCodeRef = new AtomicReference<>(); + final AtomicReference isSubscribedRef = new AtomicReference<>(); + final CountDownLatch latch = new CountDownLatch(1); + + Rx2AndroidNetworking.post(server.url("/").toString()) + .addBodyParameter("fistName", "Amit") + .addBodyParameter("lastName", "Shekhar") + .build() + .getJSONObjectSingle() + .subscribeOn(Schedulers.io()) + .observeOn(AndroidSchedulers.mainThread()) + .subscribe(new SingleObserver() { + @Override + public void onSubscribe(@NonNull Disposable disposable) { + isSubscribedRef.set(true); + } + + @Override + public void onSuccess(@NonNull JSONObject jsonObject) { + assertTrue(false); + } + + @Override + public void onError(@NonNull Throwable e) { + ANError anError = (ANError) e; + errorBodyRef.set(anError.getErrorBody()); + errorDetailRef.set(anError.getErrorDetail()); + errorCodeRef.set(anError.getErrorCode()); + latch.countDown(); + } + }); + + assertTrue(latch.await(2, SECONDS)); + + assertTrue(isSubscribedRef.get()); + + assertEquals(ANConstants.RESPONSE_FROM_SERVER_ERROR, errorDetailRef.get()); + + assertEquals("data", errorBodyRef.get()); + + assertEquals(404, errorCodeRef.get().intValue()); + + } + public void testJSONArrayPostRequest() throws InterruptedException { server.enqueue(new MockResponse().setBody("[{\"firstName\":\"Amit\", \"lastName\":\"Shekhar\"}]")); From a89be59048405d7cfae273dafe5de32787baa3c7 Mon Sep 17 00:00:00 2001 From: amitshekhariitbhu Date: Sun, 14 Jan 2018 10:48:34 +0530 Subject: [PATCH 05/20] Add test for JSONArray Single POST request --- .../Rx2PostJSONApiTest.java | 98 +++++++++++++++++++ 1 file changed, 98 insertions(+) diff --git a/rx2-android-networking/src/androidTest/java/com/rx2androidnetworking/Rx2PostJSONApiTest.java b/rx2-android-networking/src/androidTest/java/com/rx2androidnetworking/Rx2PostJSONApiTest.java index f3ad2963..2638533c 100644 --- a/rx2-android-networking/src/androidTest/java/com/rx2androidnetworking/Rx2PostJSONApiTest.java +++ b/rx2-android-networking/src/androidTest/java/com/rx2androidnetworking/Rx2PostJSONApiTest.java @@ -326,6 +326,54 @@ public void onComplete() { assertEquals("Shekhar", lastNameRef.get()); } + public void testJSONArraySinglePostRequest() throws InterruptedException { + + server.enqueue(new MockResponse().setBody("[{\"firstName\":\"Amit\", \"lastName\":\"Shekhar\"}]")); + + final AtomicReference firstNameRef = new AtomicReference<>(); + final AtomicReference lastNameRef = new AtomicReference<>(); + final AtomicReference isSubscribedRef = new AtomicReference<>(); + final CountDownLatch latch = new CountDownLatch(1); + + Rx2AndroidNetworking.post(server.url("/").toString()) + .addBodyParameter("fistName", "Amit") + .addBodyParameter("lastName", "Shekhar") + .build() + .getJSONArraySingle() + .subscribeOn(Schedulers.io()) + .observeOn(AndroidSchedulers.mainThread()) + .subscribe(new SingleObserver() { + @Override + public void onSubscribe(@NonNull Disposable disposable) { + isSubscribedRef.set(true); + } + + @Override + public void onSuccess(@NonNull JSONArray response) { + try { + JSONObject jsonObject = response.getJSONObject(0); + firstNameRef.set(jsonObject.getString("firstName")); + lastNameRef.set(jsonObject.getString("lastName")); + latch.countDown(); + } catch (JSONException e) { + assertTrue(false); + } + } + + @Override + public void onError(@NonNull Throwable throwable) { + assertTrue(false); + } + }); + + assertTrue(latch.await(2, SECONDS)); + + assertTrue(isSubscribedRef.get()); + + assertEquals("Amit", firstNameRef.get()); + assertEquals("Shekhar", lastNameRef.get()); + } + public void testJSONArrayPostRequest404() throws InterruptedException { server.enqueue(new MockResponse().setResponseCode(404).setBody("data")); @@ -381,4 +429,54 @@ public void onComplete() { } + public void testJSONArraySinglePostRequest404() throws InterruptedException { + + server.enqueue(new MockResponse().setResponseCode(404).setBody("data")); + + final AtomicReference errorDetailRef = new AtomicReference<>(); + final AtomicReference errorBodyRef = new AtomicReference<>(); + final AtomicReference errorCodeRef = new AtomicReference<>(); + final AtomicReference isSubscribedRef = new AtomicReference<>(); + final CountDownLatch latch = new CountDownLatch(1); + + Rx2AndroidNetworking.post(server.url("/").toString()) + .addBodyParameter("fistName", "Amit") + .addBodyParameter("lastName", "Shekhar") + .build() + .getJSONArraySingle() + .subscribeOn(Schedulers.io()) + .observeOn(AndroidSchedulers.mainThread()) + .subscribe(new SingleObserver() { + @Override + public void onSubscribe(@NonNull Disposable disposable) { + isSubscribedRef.set(true); + } + + @Override + public void onSuccess(@NonNull JSONArray jsonArray) { + assertTrue(false); + } + + @Override + public void onError(@NonNull Throwable e) { + ANError anError = (ANError) e; + errorBodyRef.set(anError.getErrorBody()); + errorDetailRef.set(anError.getErrorDetail()); + errorCodeRef.set(anError.getErrorCode()); + latch.countDown(); + } + }); + + assertTrue(latch.await(2, SECONDS)); + + assertTrue(isSubscribedRef.get()); + + assertEquals(ANConstants.RESPONSE_FROM_SERVER_ERROR, errorDetailRef.get()); + + assertEquals("data", errorBodyRef.get()); + + assertEquals(404, errorCodeRef.get().intValue()); + + } + } From ddfa24c71f7ea106e4a5aee41e10784b2cad7d50 Mon Sep 17 00:00:00 2001 From: amitshekhariitbhu Date: Mon, 15 Jan 2018 14:52:19 +0530 Subject: [PATCH 06/20] Add test for Object Single POST request --- .../Rx2PostObjectApiTest.java | 96 +++++++++++++++++++ 1 file changed, 96 insertions(+) diff --git a/rx2-android-networking/src/androidTest/java/com/rx2androidnetworking/Rx2PostObjectApiTest.java b/rx2-android-networking/src/androidTest/java/com/rx2androidnetworking/Rx2PostObjectApiTest.java index 544f4947..ad344b1f 100644 --- a/rx2-android-networking/src/androidTest/java/com/rx2androidnetworking/Rx2PostObjectApiTest.java +++ b/rx2-android-networking/src/androidTest/java/com/rx2androidnetworking/Rx2PostObjectApiTest.java @@ -33,7 +33,9 @@ import java.util.concurrent.atomic.AtomicReference; import io.reactivex.Observer; +import io.reactivex.SingleObserver; import io.reactivex.android.schedulers.AndroidSchedulers; +import io.reactivex.annotations.NonNull; import io.reactivex.disposables.Disposable; import io.reactivex.schedulers.Schedulers; import okhttp3.mockwebserver.MockResponse; @@ -112,6 +114,50 @@ public void onComplete() { assertEquals("Shekhar", lastNameRef.get()); } + public void testObjectSinglePostRequest() throws InterruptedException { + + server.enqueue(new MockResponse().setBody("{\"firstName\":\"Amit\", \"lastName\":\"Shekhar\"}")); + + final AtomicReference firstNameRef = new AtomicReference<>(); + final AtomicReference lastNameRef = new AtomicReference<>(); + final AtomicReference isSubscribedRef = new AtomicReference<>(); + final CountDownLatch latch = new CountDownLatch(1); + + Rx2AndroidNetworking.post(server.url("/").toString()) + .addBodyParameter("fistName", "Amit") + .addBodyParameter("lastName", "Shekhar") + .build() + .getObjectSingle(User.class) + .subscribeOn(Schedulers.io()) + .observeOn(AndroidSchedulers.mainThread()) + .subscribe(new SingleObserver() { + @Override + public void onSubscribe(@NonNull Disposable disposable) { + isSubscribedRef.set(true); + } + + @Override + public void onSuccess(@NonNull User user) { + firstNameRef.set(user.firstName); + lastNameRef.set(user.lastName); + latch.countDown(); + } + + @Override + public void onError(@NonNull Throwable throwable) { + assertTrue(false); + } + }); + + + assertTrue(latch.await(2, SECONDS)); + + assertTrue(isSubscribedRef.get()); + + assertEquals("Amit", firstNameRef.get()); + assertEquals("Shekhar", lastNameRef.get()); + } + public void testObjectPostRequest404() throws InterruptedException { server.enqueue(new MockResponse().setResponseCode(404).setBody("data")); @@ -167,6 +213,56 @@ public void onComplete() { } + public void testObjectSinglePostRequest404() throws InterruptedException { + + server.enqueue(new MockResponse().setResponseCode(404).setBody("data")); + + final AtomicReference errorDetailRef = new AtomicReference<>(); + final AtomicReference errorBodyRef = new AtomicReference<>(); + final AtomicReference errorCodeRef = new AtomicReference<>(); + final AtomicReference isSubscribedRef = new AtomicReference<>(); + final CountDownLatch latch = new CountDownLatch(1); + + Rx2AndroidNetworking.post(server.url("/").toString()) + .addBodyParameter("fistName", "Amit") + .addBodyParameter("lastName", "Shekhar") + .build() + .getObjectSingle(User.class) + .subscribeOn(Schedulers.io()) + .observeOn(AndroidSchedulers.mainThread()) + .subscribe(new SingleObserver() { + @Override + public void onSubscribe(@NonNull Disposable disposable) { + isSubscribedRef.set(true); + } + + @Override + public void onSuccess(@NonNull User user) { + assertTrue(false); + } + + @Override + public void onError(@NonNull Throwable e) { + ANError anError = (ANError) e; + errorBodyRef.set(anError.getErrorBody()); + errorDetailRef.set(anError.getErrorDetail()); + errorCodeRef.set(anError.getErrorCode()); + latch.countDown(); + } + }); + + assertTrue(latch.await(2, SECONDS)); + + assertTrue(isSubscribedRef.get()); + + assertEquals(ANConstants.RESPONSE_FROM_SERVER_ERROR, errorDetailRef.get()); + + assertEquals("data", errorBodyRef.get()); + + assertEquals(404, errorCodeRef.get().intValue()); + + } + public void testObjectListPostRequest() throws InterruptedException { server.enqueue(new MockResponse().setBody("[{\"firstName\":\"Amit\", \"lastName\":\"Shekhar\"}]")); From ff11aa59f578e205997daa8aa2c383c1d70bf3f4 Mon Sep 17 00:00:00 2001 From: amitshekhariitbhu Date: Wed, 17 Jan 2018 10:52:32 +0530 Subject: [PATCH 07/20] Add test for Object List Single POST request --- .../Rx2PostObjectApiTest.java | 94 +++++++++++++++++++ 1 file changed, 94 insertions(+) diff --git a/rx2-android-networking/src/androidTest/java/com/rx2androidnetworking/Rx2PostObjectApiTest.java b/rx2-android-networking/src/androidTest/java/com/rx2androidnetworking/Rx2PostObjectApiTest.java index ad344b1f..9582c7aa 100644 --- a/rx2-android-networking/src/androidTest/java/com/rx2androidnetworking/Rx2PostObjectApiTest.java +++ b/rx2-android-networking/src/androidTest/java/com/rx2androidnetworking/Rx2PostObjectApiTest.java @@ -315,6 +315,50 @@ public void onComplete() { assertEquals("Shekhar", lastNameRef.get()); } + public void testObjectListSinglePostRequest() throws InterruptedException { + + server.enqueue(new MockResponse().setBody("[{\"firstName\":\"Amit\", \"lastName\":\"Shekhar\"}]")); + + final AtomicReference firstNameRef = new AtomicReference<>(); + final AtomicReference lastNameRef = new AtomicReference<>(); + final AtomicReference isSubscribedRef = new AtomicReference<>(); + final CountDownLatch latch = new CountDownLatch(1); + + Rx2AndroidNetworking.post(server.url("/").toString()) + .addBodyParameter("fistName", "Amit") + .addBodyParameter("lastName", "Shekhar") + .build() + .getObjectListSingle(User.class) + .subscribeOn(Schedulers.io()) + .observeOn(AndroidSchedulers.mainThread()) + .subscribe(new SingleObserver>() { + @Override + public void onSubscribe(@NonNull Disposable disposable) { + isSubscribedRef.set(true); + } + + @Override + public void onSuccess(@NonNull List userList) { + firstNameRef.set(userList.get(0).firstName); + lastNameRef.set(userList.get(0).lastName); + latch.countDown(); + } + + @Override + public void onError(@NonNull Throwable throwable) { + assertTrue(false); + } + }); + + + assertTrue(latch.await(2, SECONDS)); + + assertTrue(isSubscribedRef.get()); + + assertEquals("Amit", firstNameRef.get()); + assertEquals("Shekhar", lastNameRef.get()); + } + public void testObjectListPostRequest404() throws InterruptedException { server.enqueue(new MockResponse().setResponseCode(404).setBody("data")); @@ -369,4 +413,54 @@ public void onComplete() { assertEquals(404, errorCodeRef.get().intValue()); } + + public void testObjectListSinglePostRequest404() throws InterruptedException { + + server.enqueue(new MockResponse().setResponseCode(404).setBody("data")); + + final AtomicReference errorDetailRef = new AtomicReference<>(); + final AtomicReference errorBodyRef = new AtomicReference<>(); + final AtomicReference errorCodeRef = new AtomicReference<>(); + final AtomicReference isSubscribedRef = new AtomicReference<>(); + final CountDownLatch latch = new CountDownLatch(1); + + Rx2AndroidNetworking.post(server.url("/").toString()) + .addBodyParameter("fistName", "Amit") + .addBodyParameter("lastName", "Shekhar") + .build() + .getObjectListSingle(User.class) + .subscribeOn(Schedulers.io()) + .observeOn(AndroidSchedulers.mainThread()) + .subscribe(new SingleObserver>() { + @Override + public void onSubscribe(@NonNull Disposable disposable) { + isSubscribedRef.set(true); + } + + @Override + public void onSuccess(@NonNull List users) { + assertTrue(false); + } + + @Override + public void onError(@NonNull Throwable e) { + ANError anError = (ANError) e; + errorBodyRef.set(anError.getErrorBody()); + errorDetailRef.set(anError.getErrorDetail()); + errorCodeRef.set(anError.getErrorCode()); + latch.countDown(); + } + }); + + assertTrue(latch.await(2, SECONDS)); + + assertTrue(isSubscribedRef.get()); + + assertEquals(ANConstants.RESPONSE_FROM_SERVER_ERROR, errorDetailRef.get()); + + assertEquals("data", errorBodyRef.get()); + + assertEquals(404, errorCodeRef.get().intValue()); + + } } From 23f388df35aeaee92b9cd85d4f64e141ceb902d0 Mon Sep 17 00:00:00 2001 From: amitshekhariitbhu Date: Fri, 19 Jan 2018 15:04:29 +0530 Subject: [PATCH 08/20] Add test for String Single POST request --- .../Rx2PostStringApiTest.java | 92 +++++++++++++++++++ 1 file changed, 92 insertions(+) diff --git a/rx2-android-networking/src/androidTest/java/com/rx2androidnetworking/Rx2PostStringApiTest.java b/rx2-android-networking/src/androidTest/java/com/rx2androidnetworking/Rx2PostStringApiTest.java index 3ba9f0df..da3d8830 100644 --- a/rx2-android-networking/src/androidTest/java/com/rx2androidnetworking/Rx2PostStringApiTest.java +++ b/rx2-android-networking/src/androidTest/java/com/rx2androidnetworking/Rx2PostStringApiTest.java @@ -31,7 +31,9 @@ import java.util.concurrent.atomic.AtomicReference; import io.reactivex.Observer; +import io.reactivex.SingleObserver; import io.reactivex.android.schedulers.AndroidSchedulers; +import io.reactivex.annotations.NonNull; import io.reactivex.disposables.Disposable; import io.reactivex.schedulers.Schedulers; import okhttp3.mockwebserver.MockResponse; @@ -106,6 +108,46 @@ public void onComplete() { assertEquals("data", responseRef.get()); } + public void testStringSinglePostRequest() throws InterruptedException { + + server.enqueue(new MockResponse().setBody("data")); + + final AtomicReference responseRef = new AtomicReference<>(); + final AtomicReference isSubscribedRef = new AtomicReference<>(); + final CountDownLatch latch = new CountDownLatch(1); + + Rx2AndroidNetworking.post(server.url("/").toString()) + .addBodyParameter("fistName", "Amit") + .addBodyParameter("lastName", "Shekhar") + .build() + .getStringSingle() + .subscribeOn(Schedulers.io()) + .observeOn(AndroidSchedulers.mainThread()) + .subscribe(new SingleObserver() { + @Override + public void onSubscribe(@NonNull Disposable disposable) { + isSubscribedRef.set(true); + } + + @Override + public void onSuccess(@NonNull String response) { + responseRef.set(response); + latch.countDown(); + } + + @Override + public void onError(@NonNull Throwable throwable) { + assertTrue(false); + } + }); + + assertTrue(latch.await(2, SECONDS)); + + assertTrue(isSubscribedRef.get()); + + assertEquals("data", responseRef.get()); + } + public void testStringPostRequest404() throws InterruptedException { server.enqueue(new MockResponse().setResponseCode(404).setBody("data")); @@ -161,4 +203,54 @@ public void onComplete() { } + public void testStringSinglePostRequest404() throws InterruptedException { + + server.enqueue(new MockResponse().setResponseCode(404).setBody("data")); + + final AtomicReference errorDetailRef = new AtomicReference<>(); + final AtomicReference errorBodyRef = new AtomicReference<>(); + final AtomicReference errorCodeRef = new AtomicReference<>(); + final AtomicReference isSubscribedRef = new AtomicReference<>(); + final CountDownLatch latch = new CountDownLatch(1); + + Rx2AndroidNetworking.post(server.url("/").toString()) + .addBodyParameter("fistName", "Amit") + .addBodyParameter("lastName", "Shekhar") + .build() + .getStringSingle() + .subscribeOn(Schedulers.io()) + .observeOn(AndroidSchedulers.mainThread()) + .subscribe(new SingleObserver() { + @Override + public void onSubscribe(@NonNull Disposable disposable) { + isSubscribedRef.set(true); + } + + @Override + public void onSuccess(@NonNull String s) { + assertTrue(false); + } + + @Override + public void onError(@NonNull Throwable e) { + ANError anError = (ANError) e; + errorBodyRef.set(anError.getErrorBody()); + errorDetailRef.set(anError.getErrorDetail()); + errorCodeRef.set(anError.getErrorCode()); + latch.countDown(); + } + }); + + assertTrue(latch.await(2, SECONDS)); + + assertTrue(isSubscribedRef.get()); + + assertEquals(ANConstants.RESPONSE_FROM_SERVER_ERROR, errorDetailRef.get()); + + assertEquals("data", errorBodyRef.get()); + + assertEquals(404, errorCodeRef.get().intValue()); + + } + } \ No newline at end of file From 5bafb32b9e42687a29216500c780043f590f54cc Mon Sep 17 00:00:00 2001 From: amitshekhariitbhu Date: Thu, 12 Apr 2018 21:52:38 +0530 Subject: [PATCH 09/20] Update gradle --- build.gradle | 2 +- gradle/wrapper/gradle-wrapper.properties | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/build.gradle b/build.gradle index 07f85749..3a98270b 100644 --- a/build.gradle +++ b/build.gradle @@ -23,7 +23,7 @@ buildscript { google() } dependencies { - classpath 'com.android.tools.build:gradle:2.3.2' + classpath 'com.android.tools.build:gradle:3.1.0' classpath 'com.jfrog.bintray.gradle:gradle-bintray-plugin:1.4' classpath 'com.github.dcendents:android-maven-gradle-plugin:1.4.1' // NOTE: Do not place your application dependencies here; they belong diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index 8e696307..b3113037 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,6 +1,6 @@ -#Wed Dec 06 17:39:39 MST 2017 +#Thu Apr 12 21:48:48 IST 2018 distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-4.1-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-4.4-all.zip From 684df12dace1fca70ed5a33f5acff46cdb577103 Mon Sep 17 00:00:00 2001 From: amitshekhariitbhu Date: Thu, 12 Apr 2018 21:57:03 +0530 Subject: [PATCH 10/20] Add option request test --- .../networking/OkHttpResponseTestActivity.java | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/app/src/main/java/com/networking/OkHttpResponseTestActivity.java b/app/src/main/java/com/networking/OkHttpResponseTestActivity.java index b7b8b311..fc82c946 100644 --- a/app/src/main/java/com/networking/OkHttpResponseTestActivity.java +++ b/app/src/main/java/com/networking/OkHttpResponseTestActivity.java @@ -1059,6 +1059,22 @@ public void onReceived(long timeTakenInMillis, long bytesSent, long bytesReceive }).start(); } + public void checkOptionsRequest(View view) { + AndroidNetworking.options("https://api.github.com/square/okhttp/issues") + .build() + .getAsOkHttpResponse(new OkHttpResponseListener() { + @Override + public void onResponse(Response response) { + Log.d(TAG, "response : " + response.headers().toString()); + } + + @Override + public void onError(ANError anError) { + Utils.logError(TAG, anError); + } + }); + } + public void getCurrentConnectionQuality(View view) { Log.d(TAG, "getCurrentConnectionQuality : " + AndroidNetworking.getCurrentConnectionQuality() + " currentBandwidth : " + AndroidNetworking.getCurrentBandwidth()); } From 10bc8a37d850005ea55126f5470fa9a6e963d199 Mon Sep 17 00:00:00 2001 From: amitshekhariitbhu Date: Fri, 13 Apr 2018 00:11:32 +0530 Subject: [PATCH 11/20] Update build tool version --- build.gradle | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/build.gradle b/build.gradle index 3a98270b..e30df516 100644 --- a/build.gradle +++ b/build.gradle @@ -47,7 +47,7 @@ ext { compileSdkVersion = 27 minSdkVersion = 14 targetSdkVersion = 27 - buildToolsVersion = "26.0.2" + buildToolsVersion = "27.0.3" // App dependencies versions okHttp3Version = "3.9.1" @@ -59,5 +59,5 @@ ext { rxJava2AndroidVersion = "2.0.1" jUnitVersion = "4.12" mockWebServerVersion = "3.9.1" - supportAppCompatVersion = "27.0.2" + supportAppCompatVersion = "27.1.1" } \ No newline at end of file From 535d0ddba312d286f7d3479ae634fe68626c0108 Mon Sep 17 00:00:00 2001 From: amitshekhariitbhu Date: Fri, 13 Apr 2018 12:54:07 +0530 Subject: [PATCH 12/20] Update rxjava and compile to implementation --- android-networking/build.gradle | 12 ++++++------ app/build.gradle | 8 ++++---- build.gradle | 6 +++--- jackson-android-networking/build.gradle | 10 +++++----- rx-android-networking/build.gradle | 10 +++++----- rx2-android-networking/build.gradle | 12 ++++++------ rx2sampleapp/build.gradle | 10 +++++----- rxsampleapp/build.gradle | 8 ++++---- 8 files changed, 38 insertions(+), 38 deletions(-) diff --git a/android-networking/build.gradle b/android-networking/build.gradle index e6a08f9b..9868eef5 100644 --- a/android-networking/build.gradle +++ b/android-networking/build.gradle @@ -40,11 +40,11 @@ android { } dependencies { - compile fileTree(dir: 'libs', include: ['*.jar']) - testCompile "junit:junit:$rootProject.ext.jUnitVersion" - androidTestCompile "com.squareup.okhttp3:mockwebserver:$rootProject.ext.mockWebServerVersion" - compile "com.squareup.okhttp3:okhttp:$rootProject.ext.okHttp3Version" - compile "com.google.code.gson:gson:$rootProject.ext.gsonVersion" - compile "com.android.support:appcompat-v7:$rootProject.ext.supportAppCompatVersion" + implementation fileTree(dir: 'libs', include: ['*.jar']) + testImplementation "junit:junit:$rootProject.ext.jUnitVersion" + androidTestImplementation "com.squareup.okhttp3:mockwebserver:$rootProject.ext.mockWebServerVersion" + api "com.squareup.okhttp3:okhttp:$rootProject.ext.okHttp3Version" + api "com.google.code.gson:gson:$rootProject.ext.gsonVersion" + implementation "com.android.support:appcompat-v7:$rootProject.ext.supportAppCompatVersion" } //apply from: 'upload.gradle' diff --git a/app/build.gradle b/app/build.gradle index e2a4b59e..b38454ed 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -37,8 +37,8 @@ android { } dependencies { - compile fileTree(dir: 'libs', include: ['*.jar']) - testCompile "junit:junit:$rootProject.ext.jUnitVersion" - compile "com.android.support:appcompat-v7:$rootProject.ext.supportAppCompatVersion" - compile project(':android-networking') + implementation fileTree(dir: 'libs', include: ['*.jar']) + testImplementation "junit:junit:$rootProject.ext.jUnitVersion" + implementation "com.android.support:appcompat-v7:$rootProject.ext.supportAppCompatVersion" + implementation project(':android-networking') } diff --git a/build.gradle b/build.gradle index e30df516..104c3c3c 100644 --- a/build.gradle +++ b/build.gradle @@ -53,10 +53,10 @@ ext { okHttp3Version = "3.9.1" gsonVersion = "2.8.2" jacksonVersion = "2.8.2" - rxJavaVersion = "1.3.4" + rxJavaVersion = "1.3.8" rxJavaAndroidVersion = "1.2.1" - rxJava2Version = "2.1.7" - rxJava2AndroidVersion = "2.0.1" + rxJava2Version = "2.1.12" + rxJava2AndroidVersion = "2.0.2" jUnitVersion = "4.12" mockWebServerVersion = "3.9.1" supportAppCompatVersion = "27.1.1" diff --git a/jackson-android-networking/build.gradle b/jackson-android-networking/build.gradle index 7e75d80f..8262775b 100644 --- a/jackson-android-networking/build.gradle +++ b/jackson-android-networking/build.gradle @@ -50,11 +50,11 @@ android { } dependencies { - compile fileTree(dir: 'libs', include: ['*.jar']) - testCompile "junit:junit:$rootProject.ext.jUnitVersion" - androidTestCompile "com.squareup.okhttp3:mockwebserver:$rootProject.ext.mockWebServerVersion" - compile "com.fasterxml.jackson.core:jackson-databind:$rootProject.ext.jacksonVersion" - compile project(':android-networking') + implementation fileTree(dir: 'libs', include: ['*.jar']) + testImplementation "junit:junit:$rootProject.ext.jUnitVersion" + androidTestImplementation "com.squareup.okhttp3:mockwebserver:$rootProject.ext.mockWebServerVersion" + api "com.fasterxml.jackson.core:jackson-databind:$rootProject.ext.jacksonVersion" + api project(':android-networking') } //apply from: 'jackson-upload.gradle' diff --git a/rx-android-networking/build.gradle b/rx-android-networking/build.gradle index a8581b9a..350b2b93 100644 --- a/rx-android-networking/build.gradle +++ b/rx-android-networking/build.gradle @@ -36,10 +36,10 @@ android { } dependencies { - compile fileTree(dir: 'libs', include: ['*.jar']) - testCompile "junit:junit:$rootProject.ext.jUnitVersion" - compile "io.reactivex:rxandroid:$rootProject.ext.rxJavaAndroidVersion" - compile "io.reactivex:rxjava:$rootProject.ext.rxJavaVersion" - compile project(':android-networking') + implementation fileTree(dir: 'libs', include: ['*.jar']) + testImplementation "junit:junit:$rootProject.ext.jUnitVersion" + api "io.reactivex:rxandroid:$rootProject.ext.rxJavaAndroidVersion" + api "io.reactivex:rxjava:$rootProject.ext.rxJavaVersion" + api project(':android-networking') } //apply from: 'rx-upload.gradle' diff --git a/rx2-android-networking/build.gradle b/rx2-android-networking/build.gradle index 24dd65ec..5c7af25f 100644 --- a/rx2-android-networking/build.gradle +++ b/rx2-android-networking/build.gradle @@ -38,11 +38,11 @@ android { } dependencies { - compile fileTree(dir: 'libs', include: ['*.jar']) - testCompile "junit:junit:$rootProject.ext.jUnitVersion" - androidTestCompile "com.squareup.okhttp3:mockwebserver:$rootProject.ext.mockWebServerVersion" - compile "io.reactivex.rxjava2:rxandroid:$rootProject.ext.rxJava2AndroidVersion" - compile "io.reactivex.rxjava2:rxjava:$rootProject.ext.rxJava2Version" - compile project(':android-networking') + implementation fileTree(dir: 'libs', include: ['*.jar']) + testImplementation "junit:junit:$rootProject.ext.jUnitVersion" + androidTestImplementation "com.squareup.okhttp3:mockwebserver:$rootProject.ext.mockWebServerVersion" + api "io.reactivex.rxjava2:rxandroid:$rootProject.ext.rxJava2AndroidVersion" + api "io.reactivex.rxjava2:rxjava:$rootProject.ext.rxJava2Version" + api project(':android-networking') } //apply from: 'rx2-upload.gradle' diff --git a/rx2sampleapp/build.gradle b/rx2sampleapp/build.gradle index 1c38a203..054e0dba 100644 --- a/rx2sampleapp/build.gradle +++ b/rx2sampleapp/build.gradle @@ -42,11 +42,11 @@ android { } dependencies { - compile fileTree(dir: 'libs', include: ['*.jar']) - androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', { + implementation fileTree(dir: 'libs', include: ['*.jar']) + androidTestImplementation('com.android.support.test.espresso:espresso-core:2.2.2', { exclude group: 'com.android.support', module: 'support-annotations' }) - compile "com.android.support:appcompat-v7:$rootProject.ext.supportAppCompatVersion" - testCompile "junit:junit:$rootProject.ext.jUnitVersion" - compile project(':rx2-android-networking') + implementation "com.android.support:appcompat-v7:$rootProject.ext.supportAppCompatVersion" + testImplementation "junit:junit:$rootProject.ext.jUnitVersion" + implementation project(':rx2-android-networking') } diff --git a/rxsampleapp/build.gradle b/rxsampleapp/build.gradle index 9a99639e..146b9ab2 100644 --- a/rxsampleapp/build.gradle +++ b/rxsampleapp/build.gradle @@ -37,8 +37,8 @@ android { } dependencies { - compile fileTree(dir: 'libs', include: ['*.jar']) - testCompile "junit:junit:$rootProject.ext.jUnitVersion" - compile "com.android.support:appcompat-v7:$rootProject.ext.supportAppCompatVersion" - compile project(':rx-android-networking') + implementation fileTree(dir: 'libs', include: ['*.jar']) + testImplementation "junit:junit:$rootProject.ext.jUnitVersion" + implementation "com.android.support:appcompat-v7:$rootProject.ext.supportAppCompatVersion" + implementation project(':rx-android-networking') } From 72f4c5cb7e4da7fc2642e5defc89927b122649f0 Mon Sep 17 00:00:00 2001 From: amitshekhariitbhu Date: Fri, 13 Apr 2018 13:02:54 +0530 Subject: [PATCH 13/20] Update okHttp version --- build.gradle | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/build.gradle b/build.gradle index 104c3c3c..b5ef45fe 100644 --- a/build.gradle +++ b/build.gradle @@ -50,7 +50,7 @@ ext { buildToolsVersion = "27.0.3" // App dependencies versions - okHttp3Version = "3.9.1" + okHttp3Version = "3.10.0" gsonVersion = "2.8.2" jacksonVersion = "2.8.2" rxJavaVersion = "1.3.8" @@ -58,6 +58,6 @@ ext { rxJava2Version = "2.1.12" rxJava2AndroidVersion = "2.0.2" jUnitVersion = "4.12" - mockWebServerVersion = "3.9.1" + mockWebServerVersion = "3.10.0" supportAppCompatVersion = "27.1.1" } \ No newline at end of file From 488362b41f7cacddf5659e4858a6d384eacefc07 Mon Sep 17 00:00:00 2001 From: amitshekhariitbhu Date: Mon, 9 Jul 2018 15:18:58 +0530 Subject: [PATCH 14/20] Add support for multiple file upload with same key --- .../androidnetworking/common/ANRequest.java | 45 ++++++++++++++----- .../java/com/networking/ApiTestActivity.java | 4 +- 2 files changed, 37 insertions(+), 12 deletions(-) diff --git a/android-networking/src/main/java/com/androidnetworking/common/ANRequest.java b/android-networking/src/main/java/com/androidnetworking/common/ANRequest.java index ab756177..87974ff2 100644 --- a/android-networking/src/main/java/com/androidnetworking/common/ANRequest.java +++ b/android-networking/src/main/java/com/androidnetworking/common/ANRequest.java @@ -92,7 +92,7 @@ public class ANRequest { private HashMap mMultiPartParameterMap = new HashMap<>(); private HashMap> mQueryParameterMap = new HashMap<>(); private HashMap mPathParameterMap = new HashMap<>(); - private HashMap mMultiPartFileMap = new HashMap<>(); + private HashMap> mMultiPartFileMap = new HashMap<>(); private String mDirPath; private String mFileName; private String mApplicationJsonString = null; @@ -858,13 +858,16 @@ public RequestBody getMultiPartRequestBody() { "form-data; name=\"" + entry.getKey() + "\""), RequestBody.create(null, entry.getValue())); } - for (HashMap.Entry entry : mMultiPartFileMap.entrySet()) { - String fileName = entry.getValue().getName(); - RequestBody fileBody = RequestBody.create(MediaType.parse(Utils.getMimeType(fileName)), - entry.getValue()); - builder.addPart(Headers.of("Content-Disposition", - "form-data; name=\"" + entry.getKey() + "\"; filename=\"" + fileName + "\""), - fileBody); + for (HashMap.Entry> entry : mMultiPartFileMap.entrySet()) { + List files = entry.getValue(); + for (File file : files) { + String fileName = file.getName(); + RequestBody fileBody = RequestBody.create(MediaType.parse(Utils.getMimeType(fileName)), + file); + builder.addPart(Headers.of("Content-Disposition", + "form-data; name=\"" + entry.getKey() + "\"; filename=\"" + fileName + "\""), + fileBody); + } } } catch (Exception e) { e.printStackTrace(); @@ -1605,7 +1608,7 @@ public static class MultiPartBuilder implements Requ private HashMap mMultiPartParameterMap = new HashMap<>(); private HashMap> mQueryParameterMap = new HashMap<>(); private HashMap mPathParameterMap = new HashMap<>(); - private HashMap mMultiPartFileMap = new HashMap<>(); + private HashMap> mMultiPartFileMap = new HashMap<>(); private CacheControl mCacheControl; private int mPercentageThresholdForCancelling = 0; private Executor mExecutor; @@ -1789,13 +1792,24 @@ public T addMultipartParameter(Object object) { } public T addMultipartFile(String key, File file) { - mMultiPartFileMap.put(key, file); + addMultipartFileWithKey(key, file); return (T) this; } public T addMultipartFile(Map multiPartFileMap) { if (multiPartFileMap != null) { - mMultiPartFileMap.putAll(multiPartFileMap); + for (HashMap.Entry entry : multiPartFileMap.entrySet()) { + addMultipartFile(entry.getKey(), entry.getValue()); + } + } + return (T) this; + } + + public T addMultipartFile(String key, List files) { + if (files != null) { + for (File file : files) { + addMultipartFileWithKey(key, file); + } } return (T) this; } @@ -1810,6 +1824,15 @@ public T setContentType(String contentType) { return (T) this; } + private void addMultipartFileWithKey(String key, File file) { + List files = mMultiPartFileMap.get(key); + if (files == null) { + files = new ArrayList<>(); + } + files.add(file); + mMultiPartFileMap.put(key, files); + } + public ANRequest build() { return new ANRequest(this); } diff --git a/app/src/main/java/com/networking/ApiTestActivity.java b/app/src/main/java/com/networking/ApiTestActivity.java index d48f282d..16c5e3b7 100644 --- a/app/src/main/java/com/networking/ApiTestActivity.java +++ b/app/src/main/java/com/networking/ApiTestActivity.java @@ -433,9 +433,11 @@ public void onError(ANError error) { } public void uploadImage(final View view) { + final String key = "image"; + final File file = new File(Environment.getExternalStorageDirectory().getAbsolutePath(), "test.png"); AndroidNetworking.upload(ApiEndPoint.BASE_URL + ApiEndPoint.UPLOAD_IMAGE) .setPriority(Priority.MEDIUM) - .addMultipartFile("image", new File(Environment.getExternalStorageDirectory().getAbsolutePath(), "test.png")) + .addMultipartFile(key, file) .setTag(this) .build() .setAnalyticsListener(new AnalyticsListener() { From 75cf7bc1e87efb41e1187f466b9a8ec0d80f441a Mon Sep 17 00:00:00 2001 From: amitshekhariitbhu Date: Mon, 9 Jul 2018 15:23:39 +0530 Subject: [PATCH 15/20] Add support for multiple file upload with same key --- .../src/main/java/com/androidnetworking/common/ANRequest.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/android-networking/src/main/java/com/androidnetworking/common/ANRequest.java b/android-networking/src/main/java/com/androidnetworking/common/ANRequest.java index 87974ff2..f6a8a126 100644 --- a/android-networking/src/main/java/com/androidnetworking/common/ANRequest.java +++ b/android-networking/src/main/java/com/androidnetworking/common/ANRequest.java @@ -1799,7 +1799,7 @@ public T addMultipartFile(String key, File file) { public T addMultipartFile(Map multiPartFileMap) { if (multiPartFileMap != null) { for (HashMap.Entry entry : multiPartFileMap.entrySet()) { - addMultipartFile(entry.getKey(), entry.getValue()); + addMultipartFileWithKey(entry.getKey(), entry.getValue()); } } return (T) this; From fcbce33722e2409dc4c5e14006ee4c6a09613194 Mon Sep 17 00:00:00 2001 From: amitshekhariitbhu Date: Mon, 9 Jul 2018 15:30:16 +0530 Subject: [PATCH 16/20] Add support for multiple file upload with same key --- .../java/com/androidnetworking/common/ANRequest.java | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/android-networking/src/main/java/com/androidnetworking/common/ANRequest.java b/android-networking/src/main/java/com/androidnetworking/common/ANRequest.java index f6a8a126..51cc461f 100644 --- a/android-networking/src/main/java/com/androidnetworking/common/ANRequest.java +++ b/android-networking/src/main/java/com/androidnetworking/common/ANRequest.java @@ -1805,7 +1805,7 @@ public T addMultipartFile(Map multiPartFileMap) { return (T) this; } - public T addMultipartFile(String key, List files) { + public T addMultipartFileList(String key, List files) { if (files != null) { for (File file : files) { addMultipartFileWithKey(key, file); @@ -1814,6 +1814,13 @@ public T addMultipartFile(String key, List files) { return (T) this; } + public T addMultipartFileList(Map> multiPartFileMap) { + if (multiPartFileMap != null) { + mMultiPartFileMap.putAll(multiPartFileMap); + } + return (T) this; + } + public T setPercentageThresholdForCancelling(int percentageThresholdForCancelling) { this.mPercentageThresholdForCancelling = percentageThresholdForCancelling; return (T) this; From 0fe224ffcfcfb740d1740c66e1395bdd16c5bf94 Mon Sep 17 00:00:00 2001 From: amitshekhariitbhu Date: Mon, 9 Jul 2018 18:03:22 +0530 Subject: [PATCH 17/20] Change to compile --- android-networking/build.gradle | 12 ++++++------ app/build.gradle | 8 ++++---- jackson-android-networking/build.gradle | 10 +++++----- rx-android-networking/build.gradle | 10 +++++----- rx2-android-networking/build.gradle | 12 ++++++------ rx2sampleapp/build.gradle | 10 +++++----- rxsampleapp/build.gradle | 8 ++++---- 7 files changed, 35 insertions(+), 35 deletions(-) diff --git a/android-networking/build.gradle b/android-networking/build.gradle index 9868eef5..e6a08f9b 100644 --- a/android-networking/build.gradle +++ b/android-networking/build.gradle @@ -40,11 +40,11 @@ android { } dependencies { - implementation fileTree(dir: 'libs', include: ['*.jar']) - testImplementation "junit:junit:$rootProject.ext.jUnitVersion" - androidTestImplementation "com.squareup.okhttp3:mockwebserver:$rootProject.ext.mockWebServerVersion" - api "com.squareup.okhttp3:okhttp:$rootProject.ext.okHttp3Version" - api "com.google.code.gson:gson:$rootProject.ext.gsonVersion" - implementation "com.android.support:appcompat-v7:$rootProject.ext.supportAppCompatVersion" + compile fileTree(dir: 'libs', include: ['*.jar']) + testCompile "junit:junit:$rootProject.ext.jUnitVersion" + androidTestCompile "com.squareup.okhttp3:mockwebserver:$rootProject.ext.mockWebServerVersion" + compile "com.squareup.okhttp3:okhttp:$rootProject.ext.okHttp3Version" + compile "com.google.code.gson:gson:$rootProject.ext.gsonVersion" + compile "com.android.support:appcompat-v7:$rootProject.ext.supportAppCompatVersion" } //apply from: 'upload.gradle' diff --git a/app/build.gradle b/app/build.gradle index b38454ed..e2a4b59e 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -37,8 +37,8 @@ android { } dependencies { - implementation fileTree(dir: 'libs', include: ['*.jar']) - testImplementation "junit:junit:$rootProject.ext.jUnitVersion" - implementation "com.android.support:appcompat-v7:$rootProject.ext.supportAppCompatVersion" - implementation project(':android-networking') + compile fileTree(dir: 'libs', include: ['*.jar']) + testCompile "junit:junit:$rootProject.ext.jUnitVersion" + compile "com.android.support:appcompat-v7:$rootProject.ext.supportAppCompatVersion" + compile project(':android-networking') } diff --git a/jackson-android-networking/build.gradle b/jackson-android-networking/build.gradle index 8262775b..7e75d80f 100644 --- a/jackson-android-networking/build.gradle +++ b/jackson-android-networking/build.gradle @@ -50,11 +50,11 @@ android { } dependencies { - implementation fileTree(dir: 'libs', include: ['*.jar']) - testImplementation "junit:junit:$rootProject.ext.jUnitVersion" - androidTestImplementation "com.squareup.okhttp3:mockwebserver:$rootProject.ext.mockWebServerVersion" - api "com.fasterxml.jackson.core:jackson-databind:$rootProject.ext.jacksonVersion" - api project(':android-networking') + compile fileTree(dir: 'libs', include: ['*.jar']) + testCompile "junit:junit:$rootProject.ext.jUnitVersion" + androidTestCompile "com.squareup.okhttp3:mockwebserver:$rootProject.ext.mockWebServerVersion" + compile "com.fasterxml.jackson.core:jackson-databind:$rootProject.ext.jacksonVersion" + compile project(':android-networking') } //apply from: 'jackson-upload.gradle' diff --git a/rx-android-networking/build.gradle b/rx-android-networking/build.gradle index 350b2b93..a8581b9a 100644 --- a/rx-android-networking/build.gradle +++ b/rx-android-networking/build.gradle @@ -36,10 +36,10 @@ android { } dependencies { - implementation fileTree(dir: 'libs', include: ['*.jar']) - testImplementation "junit:junit:$rootProject.ext.jUnitVersion" - api "io.reactivex:rxandroid:$rootProject.ext.rxJavaAndroidVersion" - api "io.reactivex:rxjava:$rootProject.ext.rxJavaVersion" - api project(':android-networking') + compile fileTree(dir: 'libs', include: ['*.jar']) + testCompile "junit:junit:$rootProject.ext.jUnitVersion" + compile "io.reactivex:rxandroid:$rootProject.ext.rxJavaAndroidVersion" + compile "io.reactivex:rxjava:$rootProject.ext.rxJavaVersion" + compile project(':android-networking') } //apply from: 'rx-upload.gradle' diff --git a/rx2-android-networking/build.gradle b/rx2-android-networking/build.gradle index 5c7af25f..24dd65ec 100644 --- a/rx2-android-networking/build.gradle +++ b/rx2-android-networking/build.gradle @@ -38,11 +38,11 @@ android { } dependencies { - implementation fileTree(dir: 'libs', include: ['*.jar']) - testImplementation "junit:junit:$rootProject.ext.jUnitVersion" - androidTestImplementation "com.squareup.okhttp3:mockwebserver:$rootProject.ext.mockWebServerVersion" - api "io.reactivex.rxjava2:rxandroid:$rootProject.ext.rxJava2AndroidVersion" - api "io.reactivex.rxjava2:rxjava:$rootProject.ext.rxJava2Version" - api project(':android-networking') + compile fileTree(dir: 'libs', include: ['*.jar']) + testCompile "junit:junit:$rootProject.ext.jUnitVersion" + androidTestCompile "com.squareup.okhttp3:mockwebserver:$rootProject.ext.mockWebServerVersion" + compile "io.reactivex.rxjava2:rxandroid:$rootProject.ext.rxJava2AndroidVersion" + compile "io.reactivex.rxjava2:rxjava:$rootProject.ext.rxJava2Version" + compile project(':android-networking') } //apply from: 'rx2-upload.gradle' diff --git a/rx2sampleapp/build.gradle b/rx2sampleapp/build.gradle index 054e0dba..1c38a203 100644 --- a/rx2sampleapp/build.gradle +++ b/rx2sampleapp/build.gradle @@ -42,11 +42,11 @@ android { } dependencies { - implementation fileTree(dir: 'libs', include: ['*.jar']) - androidTestImplementation('com.android.support.test.espresso:espresso-core:2.2.2', { + compile fileTree(dir: 'libs', include: ['*.jar']) + androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', { exclude group: 'com.android.support', module: 'support-annotations' }) - implementation "com.android.support:appcompat-v7:$rootProject.ext.supportAppCompatVersion" - testImplementation "junit:junit:$rootProject.ext.jUnitVersion" - implementation project(':rx2-android-networking') + compile "com.android.support:appcompat-v7:$rootProject.ext.supportAppCompatVersion" + testCompile "junit:junit:$rootProject.ext.jUnitVersion" + compile project(':rx2-android-networking') } diff --git a/rxsampleapp/build.gradle b/rxsampleapp/build.gradle index 146b9ab2..9a99639e 100644 --- a/rxsampleapp/build.gradle +++ b/rxsampleapp/build.gradle @@ -37,8 +37,8 @@ android { } dependencies { - implementation fileTree(dir: 'libs', include: ['*.jar']) - testImplementation "junit:junit:$rootProject.ext.jUnitVersion" - implementation "com.android.support:appcompat-v7:$rootProject.ext.supportAppCompatVersion" - implementation project(':rx-android-networking') + compile fileTree(dir: 'libs', include: ['*.jar']) + testCompile "junit:junit:$rootProject.ext.jUnitVersion" + compile "com.android.support:appcompat-v7:$rootProject.ext.supportAppCompatVersion" + compile project(':rx-android-networking') } From bba153ce15b9efd3a5f0555a1533a44da1e0447e Mon Sep 17 00:00:00 2001 From: amitshekhariitbhu Date: Tue, 10 Jul 2018 12:00:13 +0530 Subject: [PATCH 18/20] Add support for multi contentType in multipart --- .../androidnetworking/common/ANRequest.java | 119 +++++++++++++----- .../model/MultipartFileBody.java | 15 +++ .../model/MultipartStringBody.java | 13 ++ 3 files changed, 117 insertions(+), 30 deletions(-) create mode 100644 android-networking/src/main/java/com/androidnetworking/model/MultipartFileBody.java create mode 100644 android-networking/src/main/java/com/androidnetworking/model/MultipartStringBody.java diff --git a/android-networking/src/main/java/com/androidnetworking/common/ANRequest.java b/android-networking/src/main/java/com/androidnetworking/common/ANRequest.java index 51cc461f..d85b1db8 100644 --- a/android-networking/src/main/java/com/androidnetworking/common/ANRequest.java +++ b/android-networking/src/main/java/com/androidnetworking/common/ANRequest.java @@ -40,6 +40,8 @@ import com.androidnetworking.interfaces.UploadProgressListener; import com.androidnetworking.internal.ANRequestQueue; import com.androidnetworking.internal.SynchronousCall; +import com.androidnetworking.model.MultipartFileBody; +import com.androidnetworking.model.MultipartStringBody; import com.androidnetworking.utils.ParseUtil; import com.androidnetworking.utils.Utils; import com.google.gson.internal.$Gson$Types; @@ -89,10 +91,10 @@ public class ANRequest { private HashMap> mHeadersMap = new HashMap<>(); private HashMap mBodyParameterMap = new HashMap<>(); private HashMap mUrlEncodedFormBodyParameterMap = new HashMap<>(); - private HashMap mMultiPartParameterMap = new HashMap<>(); + private HashMap mMultiPartParameterMap = new HashMap<>(); private HashMap> mQueryParameterMap = new HashMap<>(); private HashMap mPathParameterMap = new HashMap<>(); - private HashMap> mMultiPartFileMap = new HashMap<>(); + private HashMap> mMultiPartFileMap = new HashMap<>(); private String mDirPath; private String mFileName; private String mApplicationJsonString = null; @@ -849,24 +851,33 @@ public RequestBody getRequestBody() { } public RequestBody getMultiPartRequestBody() { - MultipartBody.Builder builder = new MultipartBody - .Builder() + MultipartBody.Builder builder = new MultipartBody.Builder() .setType((customMediaType == null) ? MultipartBody.FORM : customMediaType); try { - for (HashMap.Entry entry : mMultiPartParameterMap.entrySet()) { + for (HashMap.Entry entry : mMultiPartParameterMap.entrySet()) { + MultipartStringBody stringBody = entry.getValue(); + MediaType mediaType = null; + if (stringBody.contentType != null) { + mediaType = MediaType.parse(stringBody.contentType); + } builder.addPart(Headers.of("Content-Disposition", "form-data; name=\"" + entry.getKey() + "\""), - RequestBody.create(null, entry.getValue())); - } - for (HashMap.Entry> entry : mMultiPartFileMap.entrySet()) { - List files = entry.getValue(); - for (File file : files) { - String fileName = file.getName(); - RequestBody fileBody = RequestBody.create(MediaType.parse(Utils.getMimeType(fileName)), - file); + RequestBody.create(mediaType, stringBody.value)); + } + for (HashMap.Entry> entry : mMultiPartFileMap.entrySet()) { + List fileBodies = entry.getValue(); + for (MultipartFileBody fileBody : fileBodies) { + String fileName = fileBody.file.getName(); + MediaType mediaType; + if (fileBody.contentType != null) { + mediaType = MediaType.parse(fileBody.contentType); + } else { + mediaType = MediaType.parse(Utils.getMimeType(fileName)); + } + RequestBody requestBody = RequestBody.create(mediaType, fileBody.file); builder.addPart(Headers.of("Content-Disposition", "form-data; name=\"" + entry.getKey() + "\"; filename=\"" + fileName + "\""), - fileBody); + requestBody); } } } catch (Exception e) { @@ -1605,10 +1616,10 @@ public static class MultiPartBuilder implements Requ private String mUrl; private Object mTag; private HashMap> mHeadersMap = new HashMap<>(); - private HashMap mMultiPartParameterMap = new HashMap<>(); private HashMap> mQueryParameterMap = new HashMap<>(); private HashMap mPathParameterMap = new HashMap<>(); - private HashMap> mMultiPartFileMap = new HashMap<>(); + private HashMap mMultiPartParameterMap = new HashMap<>(); + private HashMap> mMultiPartFileMap = new HashMap<>(); private CacheControl mCacheControl; private int mPercentageThresholdForCancelling = 0; private Executor mExecutor; @@ -1771,52 +1782,100 @@ public T setUserAgent(String userAgent) { } public T addMultipartParameter(String key, String value) { - mMultiPartParameterMap.put(key, value); + return addMultipartParameter(key, value, null); + } + + public T addMultipartParameter(String key, String value, String contentType) { + MultipartStringBody stringBody = new MultipartStringBody(value, contentType); + mMultiPartParameterMap.put(key, stringBody); return (T) this; } public T addMultipartParameter(Map multiPartParameterMap) { + return addMultipartParameter(multiPartParameterMap, null); + } + + public T addMultipartParameter(Map multiPartParameterMap, String contentType) { if (multiPartParameterMap != null) { - mMultiPartParameterMap.putAll(multiPartParameterMap); + Map parameterMap = new HashMap<>(); + for (HashMap.Entry entry : multiPartParameterMap.entrySet()) { + MultipartStringBody stringBody = new MultipartStringBody(entry.getValue(), contentType); + parameterMap.put(entry.getKey(), stringBody); + } + mMultiPartParameterMap.putAll(parameterMap); } return (T) this; } public T addMultipartParameter(Object object) { + return addMultipartParameter(object, null); + } + + public T addMultipartParameter(Object object, String contentType) { if (object != null) { - mMultiPartParameterMap.putAll(ParseUtil + Map parameterMap = ParseUtil .getParserFactory() - .getStringMap(object)); + .getStringMap(object); + addMultipartParameter(parameterMap, contentType); } return (T) this; } public T addMultipartFile(String key, File file) { - addMultipartFileWithKey(key, file); + return addMultipartFile(key, file, null); + } + + public T addMultipartFile(String key, File file, String contentType) { + MultipartFileBody fileBody = new MultipartFileBody(file, contentType); + addMultipartFileWithKey(key, fileBody); return (T) this; } public T addMultipartFile(Map multiPartFileMap) { + return addMultipartFile(multiPartFileMap, null); + } + + public T addMultipartFile(Map multiPartFileMap, String contentType) { if (multiPartFileMap != null) { for (HashMap.Entry entry : multiPartFileMap.entrySet()) { - addMultipartFileWithKey(entry.getKey(), entry.getValue()); + MultipartFileBody fileBody = new MultipartFileBody(entry.getValue(), contentType); + addMultipartFileWithKey(entry.getKey(), fileBody); } } return (T) this; } public T addMultipartFileList(String key, List files) { + return addMultipartFileList(key, files, null); + } + + public T addMultipartFileList(String key, List files, String contentType) { if (files != null) { for (File file : files) { - addMultipartFileWithKey(key, file); + MultipartFileBody fileBody = new MultipartFileBody(file, contentType); + addMultipartFileWithKey(key, fileBody); } } return (T) this; } public T addMultipartFileList(Map> multiPartFileMap) { + return addMultipartFileList(multiPartFileMap, null); + } + + public T addMultipartFileList(Map> multiPartFileMap, String contentType) { if (multiPartFileMap != null) { - mMultiPartFileMap.putAll(multiPartFileMap); + Map> parameterMap = new HashMap<>(); + for (HashMap.Entry> entry : multiPartFileMap.entrySet()) { + List files = entry.getValue(); + List fileBodies = new ArrayList<>(); + for (File file : files) { + MultipartFileBody fileBody = new MultipartFileBody(file, contentType); + fileBodies.add(fileBody); + } + parameterMap.put(entry.getKey(), fileBodies); + } + mMultiPartFileMap.putAll(parameterMap); } return (T) this; } @@ -1831,13 +1890,13 @@ public T setContentType(String contentType) { return (T) this; } - private void addMultipartFileWithKey(String key, File file) { - List files = mMultiPartFileMap.get(key); - if (files == null) { - files = new ArrayList<>(); + private void addMultipartFileWithKey(String key, MultipartFileBody fileBody) { + List fileBodies = mMultiPartFileMap.get(key); + if (fileBodies == null) { + fileBodies = new ArrayList<>(); } - files.add(file); - mMultiPartFileMap.put(key, files); + fileBodies.add(fileBody); + mMultiPartFileMap.put(key, fileBodies); } public ANRequest build() { diff --git a/android-networking/src/main/java/com/androidnetworking/model/MultipartFileBody.java b/android-networking/src/main/java/com/androidnetworking/model/MultipartFileBody.java new file mode 100644 index 00000000..7da6c943 --- /dev/null +++ b/android-networking/src/main/java/com/androidnetworking/model/MultipartFileBody.java @@ -0,0 +1,15 @@ +package com.androidnetworking.model; + +import java.io.File; + +public class MultipartFileBody { + + public final File file; + public final String contentType; + + public MultipartFileBody(File file, String contentType) { + this.file = file; + this.contentType = contentType; + } + +} diff --git a/android-networking/src/main/java/com/androidnetworking/model/MultipartStringBody.java b/android-networking/src/main/java/com/androidnetworking/model/MultipartStringBody.java new file mode 100644 index 00000000..005b69fc --- /dev/null +++ b/android-networking/src/main/java/com/androidnetworking/model/MultipartStringBody.java @@ -0,0 +1,13 @@ +package com.androidnetworking.model; + +public class MultipartStringBody { + + public final String value; + public final String contentType; + + public MultipartStringBody(String value, String contentType) { + this.value = value; + this.contentType = contentType; + } + +} From fc11e1f1fe575c6922f44013f45e9d135aa87b76 Mon Sep 17 00:00:00 2001 From: amitshekhariitbhu Date: Tue, 10 Jul 2018 12:48:06 +0530 Subject: [PATCH 19/20] Update version to 1.0.2 --- README.md | 4 ++-- android-networking/upload.gradle | 2 +- jackson-android-networking/jackson-upload.gradle | 2 +- rx-android-networking/rx-upload.gradle | 2 +- rx2-android-networking/rx2-upload.gradle | 2 +- 5 files changed, 6 insertions(+), 6 deletions(-) diff --git a/README.md b/README.md index 8b147681..a10476d7 100644 --- a/README.md +++ b/README.md @@ -57,7 +57,7 @@ Fast Android Networking Library supports Android 2.3 (Gingerbread) and later. Add this in your build.gradle ```groovy -compile 'com.amitshekhar.android:android-networking:1.0.1' +compile 'com.amitshekhar.android:android-networking:1.0.2' ``` Do not forget to add internet permission in manifest if already not present ```xml @@ -77,7 +77,7 @@ AndroidNetworking.initialize(getApplicationContext(),okHttpClient); ``` Using the Fast Android Networking with Jackson Parser ```groovy -compile 'com.amitshekhar.android:jackson-android-networking:1.0.1' +compile 'com.amitshekhar.android:jackson-android-networking:1.0.2' ``` ```java // Then set the JacksonParserFactory like below diff --git a/android-networking/upload.gradle b/android-networking/upload.gradle index 9ac0a831..0dbf33fe 100755 --- a/android-networking/upload.gradle +++ b/android-networking/upload.gradle @@ -22,7 +22,7 @@ def siteUrl = 'https://github.com/amitshekhariitbhu/Fast-Android-Networking' def gitUrl = 'https://github.com/amitshekhariitbhu/Fast-Android-Networking.git' group = "com.amitshekhar.android" -version = '1.0.1' +version = '1.0.2' install { repositories.mavenInstaller { diff --git a/jackson-android-networking/jackson-upload.gradle b/jackson-android-networking/jackson-upload.gradle index cf6bc412..34df92f3 100755 --- a/jackson-android-networking/jackson-upload.gradle +++ b/jackson-android-networking/jackson-upload.gradle @@ -24,7 +24,7 @@ def siteUrl = 'https://github.com/amitshekhariitbhu/Fast-Android-Networking' def gitUrl = 'https://github.com/amitshekhariitbhu/Fast-Android-Networking.git' group = "com.amitshekhar.android" -version = '1.0.1' +version = '1.0.2' install { repositories.mavenInstaller { diff --git a/rx-android-networking/rx-upload.gradle b/rx-android-networking/rx-upload.gradle index 50ba7616..c4fd5c45 100755 --- a/rx-android-networking/rx-upload.gradle +++ b/rx-android-networking/rx-upload.gradle @@ -22,7 +22,7 @@ def siteUrl = 'https://github.com/amitshekhariitbhu/Fast-Android-Networking' def gitUrl = 'https://github.com/amitshekhariitbhu/Fast-Android-Networking.git' group = "com.amitshekhar.android" -version = '1.0.1' +version = '1.0.2' install { repositories.mavenInstaller { diff --git a/rx2-android-networking/rx2-upload.gradle b/rx2-android-networking/rx2-upload.gradle index 50f6b80d..bd5fb3f7 100755 --- a/rx2-android-networking/rx2-upload.gradle +++ b/rx2-android-networking/rx2-upload.gradle @@ -24,7 +24,7 @@ def siteUrl = 'https://github.com/amitshekhariitbhu/Fast-Android-Networking' def gitUrl = 'https://github.com/amitshekhariitbhu/Fast-Android-Networking.git' group = "com.amitshekhar.android" -version = '1.0.1' +version = '1.0.2' install { repositories.mavenInstaller { From b35b47a3f3cab72638f5cd1ab389da7afb073db6 Mon Sep 17 00:00:00 2001 From: amitshekhariitbhu Date: Tue, 10 Jul 2018 13:38:09 +0530 Subject: [PATCH 20/20] Update Changelog --- CHANGELOG.md | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index eac3663a..d538069d 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,15 @@ Change Log ========== +Version 1.0.2 *(2018-07-10)* +---------------------------- + + * New: Add support for multiple file upload with same key + * New: Add support for multi contentType in multipart + * Bump OkHttp Version to 3.10.0 + * Bump other dependencies + + Version 1.0.1 *(2017-12-20)* ----------------------------