簡體   English   中英

保持主線程等待,直到RxJava Observable完成

[英]Keep main thread wait until RxJava Observable complete

我想保留我的主線程,直到RxJava 2 Observable完成。 我的編碼如下。 情況是當我請求該方法包含以下代碼時,該方法只是在執行而無需等待可觀察的

 Observable
                        .fromArray(observableList)
                        .subscribeOn(Schedulers.io())
                        .subscribe(new Consumer<List<Observable<List<String>>>>() {
                        @Override
                        public void accept(List<Observable<List<String>>> list) throws Exception {

                            for (Observable<List<String>> observable : list) {
                                System.out.println("Thread name " + Thread.currentThread().getName());

                                observable.subscribe(new Consumer<List<String>>() {
                                    @Override
                                    public void accept(List<String> t) throws Exception {

                                        Gson jsonBuilder = new Gson();

                                        Object obj = new Object();

                                        JsonElement element = jsonBuilder.toJsonTree(obj);

                                        element.getAsJsonObject().addProperty(t.get(0), t.get(1));

                                        Gson g = new Gson();
                                        Object out = g.fromJson(t.get(1), Object.class);

                                        microResponses.put(t.get(0), out);
                                    }
                                });

                            }

                        }


         });

請使用以下任一選項:-1.刪除subscribeOn 2.使用Thread.sleep保留足夠大的時間來完成任務3. Google toBlocking rxjava中的用法

您不需要多級訂閱,也不需要嵌套Observable:

Oservable
.fromArray(observableList)
.flatMapIterale(i -> i)
.flatMap(i -> i)
.doOnNext(t -> {
   Gson jsonBuilder = new Gson();
   Object obj = new Object();
   JsonElement element = jsonBuilder.toJsonTree(obj);
   element.getAsJsonObject().addProperty(t.get(0), t.get(1));
   Gson g = new Gson();
   Object out = g.fromJson(t.get(1), Object.class);
   microResponses.put(t.get(0), out);
})
// .subscribe(...) or .doOnComplete(...).subscribe();
;

但是,您編寫的代碼有幾個問題:

  • 前四行是空操作,因為您沒有使用JsonElement。
  • 為什么不直接使用new JsonObject()
  • Object out = g.fromJson(t.get(1), Object.class); 除了一個空的JsonObjecy之外,它不會產生任何其他東西,因為Object沒有任何屬性。
  • 為什么要使用List,而不是真正意義上的東西,例如Map.Entry<String,Object>甚至Pair<String, Object>

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM