Ich habe so JSON:Richtiger Weg RxJava + Nachrüstung mit 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"
},
...
]
}
Nach ihr zu Classes
(pojo) mit Schema pojo erstellt hat. Erste stellt Verfahren Daten aus data
Array zu erhalten ->
public List<Datum> getData() {
return data;
}
Und das zweite ist ein model
dieser Daten.
Während ich eine call
ausführen mit nur 2,0 nachzurüsten, jede object
vom data
Array analysieren und fügen Sie für mich 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);
}
dieser So eine übliche Art und Weise. Jetzt möchte ich dasselbe mit RxJava
machen.
Hier ist meine interface
:
public interface Places {
@GET("places.getPlaces")
Observable<PlaceList> list(@Query("type") int type,
@Query("offset") int offset,
@Query("limit") int limit);
}
Und das ist, wie ich call
ausführen:
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());
}
});
Ja, es funktioniert auch, aber war es eine richtige Art und Weise Rx
zu verwenden? Ich habe versucht, die für das Parsen benötigte Zeit zu vergleichen, konnte aber keinen nennenswerten Unterschied feststellen. Ich bin gerade an meinem ersten Tag des Studiums RxJava, nachdem ich einige Artikel gelesen habe. Also, was ist der richtige Weg, um die Kraft von RxJava
zu fühlen?
Das ist in Ordnung. Die wahre Stärke von RxJava kommt jedoch, wenn Sie Daten abrufen, in der Datenbank speichern und dann einen weiteren Netzwerkaufruf für eine bestimmte Teilmenge der Ergebnisse durchführen möchten usw. – Jahnold