diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index f08a133..a98e80d 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,6 +1,6 @@ -#Fri Dec 12 01:30:02 IST 2014 +#Mon Jan 29 13:39:11 IST 2018 distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-2.10-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-4.1-all.zip diff --git a/library/build.gradle b/library/build.gradle index d9cd2c5..90a0168 100644 --- a/library/build.gradle +++ b/library/build.gradle @@ -3,7 +3,7 @@ buildscript { jcenter() } dependencies { - classpath 'com.android.tools.build:gradle:1.3.0' + classpath 'com.android.tools.build:gradle:+' classpath 'com.jfrog.bintray.gradle:gradle-bintray-plugin:0.5' } } @@ -19,11 +19,13 @@ apply plugin: 'com.jfrog.bintray' dependencies { compile 'com.android.support:support-v4:+' compile 'com.google.code.gson:gson:2.2.4' + compile 'io.reactivex.rxjava2:rxandroid:2.0.1' + compile 'io.reactivex.rxjava2:rxjava:2.0.8' } android { - compileSdkVersion 23 - buildToolsVersion '23.0.3' + compileSdkVersion 26 + buildToolsVersion '26.0.2' useLibrary 'org.apache.http.legacy' sourceSets { main { diff --git a/library/src/com/android/volley/RxRequest.java b/library/src/com/android/volley/RxRequest.java new file mode 100644 index 0000000..2c947ef --- /dev/null +++ b/library/src/com/android/volley/RxRequest.java @@ -0,0 +1,112 @@ +package com.android.volley; + + +import android.content.Context; + +import com.android.volley.error.VolleyError; +import com.android.volley.request.GsonRequest; +import com.android.volley.toolbox.VolleyTickle; + +import java.util.Map; + +import io.reactivex.SingleEmitter; +import io.reactivex.SingleOnSubscribe; + +public class RxRequest implements SingleOnSubscribe { + + private RequestBuilder requestBuilder; + + private RxRequest(RequestBuilder requestBuilder) { + this.requestBuilder = requestBuilder; + } + + public static RequestBuilder newRequest(Context context) { + return new RequestBuilder(context); + } + + public static class RequestBuilder { + + private final Context context; + private String url; + private Map header; + private Class type; + private int method; + private Map param; + + private RequestBuilder(Context context) { + this.context = context; + } + + public RequestBuilder setRequestType(Class type) { + this.type = type; + return this; + } + + public RequestBuilder setRequestMethod(int method) { + this.method = method; + return this; + } + + public RequestBuilder setUrl(String url) { + this.url = url; + return this; + } + + public RequestBuilder setHeader(Map header) { + this.header = header; + return this; + } + + public RequestBuilder setParam(Map param) { + this.param = param; + return this; + } + + public RxRequest build() { + return new RxRequest<>(this); + } + } + + @Override + public void subscribe(SingleEmitter emitter) { + RxListener rxListener = new RxListener<>(emitter, requestBuilder); + rxListener.start(); + } + + private static class RxListener implements Response.Listener, Response.ErrorListener { + + private final SingleEmitter emitter; + private final GsonRequest gsonRequest; + private final Context context; + + private RxListener(SingleEmitter emitter, RequestBuilder requestBuilder) { + this.emitter = emitter; + this.gsonRequest = new GsonRequest<>(requestBuilder.method, requestBuilder.url, requestBuilder.type, requestBuilder.header, requestBuilder.param, this, this); + this.context = requestBuilder.context; + } + + public void start() { + RequestTickle requestTickle = VolleyTickle.newRequestTickle(context); + requestTickle.add(gsonRequest); + requestTickle.start(); + } + + @Override + public void onResponse(T response) { + if (emitter.isDisposed()) { + return; + } + + emitter.onSuccess(response); + } + + @Override + public void onErrorResponse(VolleyError error) { + if (emitter.isDisposed()) { + return; + } + + emitter.onError(error); + } + } +} diff --git a/sample/AndroidManifest.xml b/sample/AndroidManifest.xml index 9af8129..777301f 100644 --- a/sample/AndroidManifest.xml +++ b/sample/AndroidManifest.xml @@ -83,6 +83,12 @@ android:parentActivityName="com.volley.demo.SimpleCacheActivity" android:theme="@style/AppTheme.Translucent" > + + + > + newRequest(ExampleRxGsonRequest.this) + .setRequestType(MyClass.class) + .setUrl("http://validate.jsontest.com/?json={'key':'value'}") + .setRequestMethod(GET) + .build()) + .subscribeOn(Schedulers.io()) + .observeOn(AndroidSchedulers.mainThread()) + .subscribe(new SingleObserver() { + @Override + public void onSubscribe(Disposable d) { + compositeDisposable.add(d); + } + + @Override + public void onSuccess(Object response) { + MyClass myClass = (MyClass) response; + mTvResult.setText(Long.toString(myClass.mNanoseconds)); + } + + @Override + public void onError(Throwable e) { + + } + }); + + + } + }); + } + + @Override + protected void onStop() { + compositeDisposable.clear(); + super.onStop(); + } +}