Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions gradle/wrapper/gradle-wrapper.properties
Original file line number Diff line number Diff line change
@@ -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
8 changes: 5 additions & 3 deletions library/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -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'
}
}
Expand All @@ -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 {
Expand Down
112 changes: 112 additions & 0 deletions library/src/com/android/volley/RxRequest.java
Original file line number Diff line number Diff line change
@@ -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<T> implements SingleOnSubscribe<T> {

private RequestBuilder requestBuilder;

private RxRequest(RequestBuilder requestBuilder) {
this.requestBuilder = requestBuilder;
}

public static <T> RequestBuilder newRequest(Context context) {
return new RequestBuilder<T>(context);
}

public static class RequestBuilder<T> {

private final Context context;
private String url;
private Map<String, String> header;
private Class type;
private int method;
private Map<String, String> 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<String, String> header) {
this.header = header;
return this;
}

public RequestBuilder setParam(Map<String, String> param) {
this.param = param;
return this;
}

public RxRequest<T> build() {
return new RxRequest<>(this);
}
}

@Override
public void subscribe(SingleEmitter<T> emitter) {
RxListener<T> rxListener = new RxListener<>(emitter, requestBuilder);
rxListener.start();
}

private static class RxListener<T> implements Response.Listener<T>, Response.ErrorListener {

private final SingleEmitter<T> emitter;
private final GsonRequest<T> gsonRequest;
private final Context context;

private RxListener(SingleEmitter<T> 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);
}
}
}
6 changes: 6 additions & 0 deletions sample/AndroidManifest.xml
Original file line number Diff line number Diff line change
Expand Up @@ -83,6 +83,12 @@
android:parentActivityName="com.volley.demo.SimpleCacheActivity"
android:theme="@style/AppTheme.Translucent" >
</activity>

<activity
android:name="com.volley.demo.ExampleRxGsonRequest"
android:label="RxTest" >
>
</activity>
<activity
android:name="com.google.android.gms.ads.AdActivity"
android:theme="@android:style/Theme.Translucent"
Expand Down
21 changes: 15 additions & 6 deletions sample/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -10,17 +10,26 @@ buildscript {
apply plugin: 'com.android.application'

dependencies {
compile fileTree(include: '*.jar', dir: 'libs')
compile 'com.android.support:appcompat-v7:+'
compile 'com.google.android.gms:play-services-ads:+'
compile project(':library')
implementation fileTree(include: '*.jar', dir: 'libs')
implementation 'com.android.support:appcompat-v7:+'
implementation 'com.google.android.gms:play-services-ads:+'
implementation project(':library')
}


android {
compileSdkVersion 23
buildToolsVersion '23.0.3'
compileSdkVersion 26
buildToolsVersion '26.0.2'

useLibrary 'org.apache.http.legacy'

defaultConfig {
minSdkVersion 14
targetSdkVersion 26
versionCode 1
versionName "1.0"
}

sourceSets {
main {
manifest.srcFile 'AndroidManifest.xml'
Expand Down
74 changes: 74 additions & 0 deletions sample/src/com/volley/demo/ExampleRxGsonRequest.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,74 @@
package com.volley.demo;

import android.os.Bundle;
import android.support.annotation.Nullable;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;

import com.android.volley.RxRequest;
import com.volley.demo.util.MyClass;

import io.reactivex.Single;
import io.reactivex.SingleObserver;
import io.reactivex.android.schedulers.AndroidSchedulers;
import io.reactivex.disposables.CompositeDisposable;
import io.reactivex.disposables.Disposable;
import io.reactivex.schedulers.Schedulers;

import static com.android.volley.Request.Method.GET;


public class ExampleRxGsonRequest extends AppCompatActivity {

private TextView mTvResult;
private CompositeDisposable compositeDisposable = new CompositeDisposable();

@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_gson_request);

mTvResult = (TextView) findViewById(R.id.tv_result);

Button btnSimpleRequest = (Button) findViewById(R.id.btn_gson_request);
btnSimpleRequest.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Single.create(RxRequest.<MyClass>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();
}
}