2017-05-20 12 views
0

RxJava2とRetrofit2(Kotlin)を使用していくつかのApiデータを取得しようとしているときにアンドロイドアプリの問題に直面しています。コールを実行すると、画面は黒くなり、アプリケーションはログメッセージなしでもう応答しなくなります。RxJava2 +データリクエスト時に黒い画面を表示

@GET("api/apartments?projection={\"id\":1,\"address\":1}") 
    fun getAllApartments(@Header(AUTHORIZATION) auth: String): Single<List<APTLIST>> 

これは私が呼び出しを実行する方法です:

api/apartments?projection={"id":1,"address":1} 

この呼び出しのためのサービス・インターフェースはこの1つである:

私が使用しているコールのURLは以下のとおりです。

override fun getAllApartments(): Single<List<APTLIST>> = retrofit.create(ApartmentsService::class.java).getAllApartments("$BEARER$token") 

これは私がこの関数を呼び出す方法です。

getAllApartmentsUseCase.getAllApartments() 
    .subscribe(
     { 
      apartments.clear() 
      apartments.addAll(it) 
      view.showApartments(apartments) 
     }, 
     { println(it.message) } 
    ) 

この呼び出しは、ポストマン上で動作し、結果は以下の通りです:

[ 
    { 
    "_id": "591ecaca861a528a5b4c3d90", 
    "id": "ROC 03" 
    }, 
    { 
    "_id": "591a0fb2861a528a5b4c3d60" 
    }, 
    { 
    "_id": "58be94d484c4b0a468fb93e0", 
    "id": "CAN 2.3", 
    "address": "Els Refugis" 
    } 
] 
+0

だけリターン単一ずにエンドポイントを消費することを最初に試します。あなたの問題はRX – paul

+0

に関係しているかどうかわかりません。それはそうではないようです.execute()経由で同期呼び出しを実行すると、黒い画面でフリーズします。たぶん私はこのURLクエリを使用している方法ですか? – Joan

+0

アンドロイドメイトには分かりません。エンドポイントに非常に簡単なリクエストを作成しよう – paul

答えて

0

私はあなたがメインスレッドでウェブコールを作っていると思います。奇妙なことですが、あなたはANRのようなものを取得し、android.os.NetworkOnMainThreadExceptionは取得しません。

getAllApartmentsUseCase 
    .getAllApartments() 

    .subscribeOn(Schedulers.io()) //scheduler in which observable will execute 
    .observeOn(AndroidSchedulers.mainThread()) //scheduler in which subscriber's methods will be called 

    .subscribe(/*subscriber*/) 

https://medium.com/upday-devs/rxjava-subscribeon-vs-observeon-9af518ded53a

関連する問題