Запросы Rxjava и Volley

Мой вопрос должен звучать как глупо, но я просто прыгаю с Asynktask в RxJava . Так:

Можно ли использовать RxJava Observable с запросами Volley ?, это означает, что с помощью будущих запросов.

Я спрашиваю об этом, потому что другой httpClient, такой как retrofit, использует RxJava очень хорошо, но лично любит Volley, так ли это возможно?

редактировать

Основываясь на первом ответе, я понимаю, что это возможно.

Не могли бы вы поделиться примером, как это сделать?

Solutions Collecting From Web of "Запросы Rxjava и Volley"

Наконец и спасибо за ваш ответ, я нахожу решение, которое хочет поделиться:

В моем случае я использую Activities, но для фрагмента должен быть более или менее равным.

И я хочу, чтобы получить JsonObject в ответ, но может быть вашей пользовательской реализацией Volley.

public class MyActivity extends BaseActivityWithoutReloadCustomer implements Observer<JSONObject> { private CompositeSubscription mCompositeSubscription = new CompositeSubscription(); private Activity act; /** * @use handle response from future request, in my case JsonObject. */ private JSONObject getRouteData() throws ExecutionException, InterruptedException { RequestFuture<JSONObject> future = RequestFuture.newFuture(); String Url=Tools.Get_Domain(act.getApplicationContext(), Global_vars.domain)+ PilotoWs.wsgetRoutesbyUser+ Uri.encode(routeId); final Request.Priority priority= Request.Priority.IMMEDIATE; Estratek_JSONObjectRequest req= new Estratek_JSONObjectRequest(Request.Method.GET, Url,future,future,act,priority); POStreet_controller.getInstance().addToRequestQueue(req); return future.get(); } /** *@use the observable, same type data Jsob Object */ public Observable<JSONObject> newGetRouteData() { return Observable.defer(new Func0<Observable<JSONObject>>() { @Override public Observable<JSONObject> call() { Exception exception; try { return Observable.just(getRouteData()); } catch (InterruptedException | ExecutionException e) { Log.e("routes", e.getMessage()); return Observable.error(e); } } }); }; @Override public void onCreate(Bundle instance) { super.onCreate(instance); setContentView(R.layout.yourLayout); act = this; /** * @condition: RxJava future request with volley */ mCompositeSubscription.add(newGetRouteData() .subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()) .subscribe(this)); } @Override public void onCompleted() { System.out.println("Completed!"); } @Override public void onError(Throwable e) { VolleyError cause = (VolleyError) e.getCause(); String s = new String(cause.networkResponse.data, Charset.forName("UTF-8")); Log.e("adf", s); Log.e("adf", cause.toString()); } @Override public void onNext(JSONObject json) { Log.d("ruta", json.toString()); } 

Для меня это просто работает. Надежда помогает кому-то.

Изменить Estratek_JSONObjectRequest.java

 public class Estratek_JSONObjectRequest extends JsonObjectRequest{ Activity Act; Priority priority; public Estratek_JSONObjectRequest(int method, String url, JSONObject jsonRequest, Listener<JSONObject> listener, ErrorListener errorListener,Activity act, Priority p) { super(method, url, jsonRequest, listener, errorListener); this.Act=act; this.priority=p; } public Estratek_JSONObjectRequest(int method, String url, Listener<JSONObject> listener, ErrorListener errorListener,Activity act, Priority p) { super(method, url, null, listener, errorListener); this.Act=act; this.priority=p; } @Override public Map<String, String> getHeaders() { HashMap<String, String> headers = new HashMap<String, String>(); headers.put("Content-Type", "application/json; charset=utf-8"); headers.put("Authorization", "Bearer "+Tools.mySomeBearerToken); return headers; } //it make posible send parameters into the body. @Override public Priority getPriority(){ return priority; } protected Response<JSONObject> parseNetworkResponse(NetworkResponse response) { try { String je = new String(response.data, HttpHeaderParser.parseCharset(response.headers)); if (je.equals("null")){ je="{useInventAverage:0}"; return Response.success(new JSONObject(je), HttpHeaderParser.parseCacheHeaders(response)); } else return Response.success(new JSONObject(je), HttpHeaderParser.parseCacheHeaders(response)); } catch (UnsupportedEncodingException var3) { return Response.error(new ParseError(var3)); } catch (JSONException var4) { return Response.error(new ParseError(var4)); } } 

}

Это похоже на конструкторы Volley, но я делаю свой собственный заказ, чтобы отправить некоторые заголовки, например токен-носитель, тип контента, приоритет отправки и т. Д. В противном случае это то же самое,

Хорошей новостью является то, что г-н 张涛 kymjs модифицировал Google Volley в RxVolley , удалил поддержку HttpClient и RxJava.

RxVolley = Volley + RxJava + OkHttp

Полная документация доступна по адресу http://rxvolley.mydoc.io/

PS: Я сейчас думаю о том, как использовать RxVolley с поддержкой нескольких настраиваемых JSON-преобразователей, таких как retrofit!