Intereting Posts
Как удалить окно сообщения о проблемах с рендерингом в Intellij IDEA 13 макет предварительного просмотра Android: ClassCastException при добавлении заголовка в ExpandableListView Как явным образом отключить режим потоковой передачи для HTTP-соединений в Android? Как я могу снять или сбросить переключатель? Android: реализация progressbar и «загрузка …» для Endless List, например Android Market MapFragment получает темное наложение при использовании в DialogActivity Просмотр фрагмента ViewPager's, потерянный при отображении родительского фрагмента ViewPager, затем отображается Как связать приложение Android Market Не удалось получить требуемый номер версии ADT из SDK Как установить программный эффект Ripple на LinearLayout? Android: последствия наличия targetSDK> BuildTarget DefaultHttpClient для AndroidHttpClient Проблема с 9 патч-изображением в качестве фона Частично выбранный флажок на Android? Как добавить изображение в правую сторону панели действий?

Запросы 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!