У меня есть такие JSON:Правильный способ использования RxJava + Дооснащение 2
{
"success":true,
"data":[
{
"id":"29",
"name":"\u0420\u0435\u0441\u0442\u043e\u0440\u0430\u0446\u0456\u044f \u0411\u0430\u0447\u0435\u0432\u0441\u044c\u043a\u0438\u0445 \/ Baczewski Restaurant",
"street":"\u0432\u0443\u043b. \u0428\u0435\u0432\u0441\u044c\u043a\u0430, 8",
"latitude":"49.842292845502",
"longitude":"24.029848249565",
"image":"https:\/\/i.onthe.io\/j9aocq72r2lfsmoh9.r500x500.01ff9fff.jpg"
},
...
]
}
По его надо Classes
(Pojo), созданный со схемой на POJO. Сначала один обеспечивает способ для получения данных из массива data
->
public List<Datum> getData() {
return data;
}
И второй один является model
этих данных.
При использовании только дооснастить 2.0 я выполнить call
, разбор каждого object
из data
массива и добавить его в RecyclerView.Adapter
Call<PlaceList> call = service.list(1, offset, 10);
call.enqueue(new Callback<PlaceList>() {
@Override
public void onResponse(Call<PlaceList> call, Response<PlaceList> response) {
final int size = response.body().getData().size();
for (int i = 0; i < size; i++) {
places.add(response.body().getData().get(i));
}
handler.post(new Runnable() {
@Override
public void run() {
if (offset == 0)
// adapter.notifyItemRangeInserted(0, foodDataList.size());
placeRecyclerAdapter.notifyDataSetChanged();
else
placeRecyclerAdapter.notifyItemRangeChanged(places.size() - size, places.size());
}
});
}
@Override
public void onFailure(Call<PlaceList> call, Throwable t) {
}
});
_______________
public interface Places {
@GET("places.getPlaces")
Call<PlaceList> list(
@Query("type") int type,
@Query("offset") int offset,
@Query("limit") int limit);
}
Так что это обычный способ для меня. Теперь я хочу сделать то же самое, используя RxJava
.
Вот мой interface
:
public interface Places {
@GET("places.getPlaces")
Observable<PlaceList> list(@Query("type") int type,
@Query("offset") int offset,
@Query("limit") int limit);
}
И это, как я выполняю call
:
Observable<PlaceList> call = service.list(1, offset, 10);
subscription = call.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread()).subscribe(new Subscriber<PlaceList>() {
@Override
public void onCompleted() {
System.out.println("onComplete");
}
@Override
public void onError(Throwable e) {
System.out.println("onError");
e.printStackTrace();
}
@Override
public void onNext(PlaceList data) {
placeRecyclerAdapter.addData(data.getData());
}
});
Да, это работает, но это правильный способ использования Rx
? Я попытался сравнить время, необходимое для синтаксического анализа, но не видел заметной разницы. Я только в первый день изучения RxJava, прочитав несколько статей. Итак, каков правильный способ почувствовать силу RxJava
?
Это прекрасно. Реальная сила RxJava приходит, когда вы хотите получить данные, сохраните их в db, затем выполните другой сетевой вызов по определенному подмножеству результатов и т. Д. – Jahnold