Bagaimana cara meneruskan objek dari flatMap ke subscribe dalam sebuah rantai? Dan dalam cuplikan kode di bawah, bagaimana objek blog dapat diakses di sepanjang rantai?

    Single<HttpResponse<JsonNode>> singleHttpClient = httClient.post();
    singleHttpClient .toObservable().flatMap(httpResponse -> {
        if(httpResponse.getStatus() == 200) {
            JsonNode responseNode = httpResponse.getBody();
            List<JSONObject> blogObjects = iterateFrom(responseNode.getObject().getJSONArray("blogs"))
        }
        return Observable.fromIterable(blogObjects).toList().toObservable();
    }).flatMap(jsonObjects -> Observable.fromIterable(jsonObjects))
            .flatMap(jsonObject -> {
                return Observable.just(new Blog(jsonObject.getString("id"), jsonObject.getString("guid")));
            }).flatMap(blog -> {
                Single<HttpResponse<JsonNode>> singleHttpClient2 = httpClient2.post();
                singleHttpClient2.getParams().put("guid", blog.getImageGuid());
                return singleHttpClient2.postAsBinary().toObservable();
            }).subscribe(javaScriptObjectHttpResponse -> {
                JavaScriptObject jsoBody = javaScriptObjectHttpResponse.getBody();
                doSomethingWith(blog, jsBody); // How to access `blog` from here?
            });
0
quarks 31 Januari 2020, 07:52

2 jawaban

Jawaban Terbaik

Gunakan metode zipWith seperti di bawah ini. Buat variabel di objek Blog yang menampung respons data blog Anda dari server dan buat getter dan setter untuk variabel data tersebut.

Single<HttpResponse<JsonNode>> singleHttpClient = httClient.post();
    singleHttpClient .toObservable().flatMap(httpResponse -> {
        if(httpResponse.getStatus() == 200) {
            JsonNode responseNode = httpResponse.getBody();
            List<JSONObject> blogObjects = iterateFrom(responseNode.getObject().getJSONArray("blogs"))
        }
        return Observable.fromIterable(blogObjects).toList().toObservable();
    }).flatMap(jsonObjects -> Observable.fromIterable(jsonObjects))
            .flatMap(jsonObject -> {
                return Observable.just(new Blog(jsonObject.getString("id"), jsonObject.getString("guid")));
            }).flatMap(blog -> {
        Single<HttpResponse<JsonNode>> singleHttpClient2 = httpClient2.post();
        singleHttpClient2.getParams().put("guid", blog.getImageGuid());
        return Observable.zipWith(singleHttpClient2.postAsBinary().toObservable(), (Blog blog, HttpResponse data)->blog.setData(data));
    }).subscribe(blog -> {
        doSomethingWith(blog); // How to access `blog` from here?
    });
1
KuLdip PaTel 31 Januari 2020, 06:56

Dalam reaktor proyek, ada operator bernama zip untuk mengikat Mono dan Fluks (mirip dengan Observables di rx-java) sehingga banyak item dapat diturunkan (sebagai Tuple) pipa.

Operator serupa harus ada untuk rx-Java.

Pertanyaan stack-overflow yang bermanfaat, Rxjava Android cara menggunakan operator Zip

0
Nipuna Saranga 31 Januari 2020, 05:19