I am using retrofit + RxJava2, i want to access to json body before parsing it via GSON library in retrofit, here is my code :
trafficApi
.trafficControlDetails()
.observeOn(AndroidSchedulers.mainThread())
.subscribeOn(application.defaultSubscribeScheduler())
.subscribeWith(new DisposableObserver<TrafficDetailItem>()
{
@Override
public void onNext(@io.reactivex.annotations.NonNull TrafficDetailItem trafficDetailItemJsonResponse)
{
SplashViewModel.this.trafficControlDetails = trafficDetailItemJsonResponse;
}
@Override
public void onError(@io.reactivex.annotations.NonNull Throwable e)
{
retryButtonVisibility.set(View.VISIBLE);
errorMessageVisibility.set(View.VISIBLE);
errorMessage.set(context.getString(R.string.connection_error_message));
}
@Override
public void onComplete()
{
retryButtonVisibility.set(View.INVISIBLE);
errorMessageVisibility.set(View.INVISIBLE);
saveData(trafficControlDetails);
}
});
As you can see i receive parsed POJO in my observer, but i don't know how can i get pure JSON data as well.
I leave you an example how to request data and parse the Json content then create an observable from that content.
HttpClient client = HttpClient.newHttpClient();
HttpRequest request = HttpRequest.newBuilder()
.GET()
.uri(URI.create("http://dummy.restapiexample.com/api/v1/employees"))
.timeout(Duration.ofSeconds(4))
.build();
try {
HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());
JsonObject jsonResponse = new JsonParser().parse(response.body()).getAsJsonObject();
JsonArray data = jsonResponse.getAsJsonArray("data");
Observable.fromIterable(data)
.filter(s -> {
JsonObject currentElement = s.getAsJsonObject();
Integer age = currentElement.get("employee_age").getAsInt();
return age >= 60;
})
.sorted((x,y) ->
Integer.compare(
x.getAsJsonObject().get("employee_age").getAsInt(),
y.getAsJsonObject().get("employee_age").getAsInt()))
.map(s -> {
JsonObject current = s.getAsJsonObject();
JsonObject result = new JsonObject();
result.addProperty("name", current.get("employee_name").getAsString());
result.addProperty("age", current.get("employee_age").getAsInt());
result.addProperty("id", current.get("id").getAsInt());
result.addProperty("salary", current.get("employee_salary").getAsInt());
return result;
}).doOnError(s -> System.out.println("Map went wrong"))
.subscribe(s -> System.out.println(s), s -> System.out.println("error with " + s));
} catch (Exception e) {
System.out.println("error" +e.toString());
}
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.