2016-08-09 8 views
0

ボタンをクリックした後、RetrofitサービスコールuploadPhotoを作成するアンドロイドアプリがあります。向き変更後のRxJava Androidアプリの整備サービス応答

このサービスコールの応答では、写真のIDを受信したいので、サービスの応答またはエラーを聞く必要があります。私はこの

Signletons.retrofitService.uploadPhoto(photoData) 
        .subscribe(new Action1<Response<UploadResponse>>() { 
         @Override 
         public void call(Response<UploadResponse> response) { 
          // response.body().photoId 
         } 
        }) 

を扱うしかし、活動は姿勢変化により破壊されますとき、私は上記の観測から退会し、私の写真リクエストが送信された間、これはどこかで起こるかもしれませんが、前に応答が受信されたコードを持っています。つまり、写真をアップロードすることはできますが、写真IDは取得できません。

この状況を処理し、オリエンテーションが変更された後に再登録すると、オリエンテーションの変更により逃した結果を得るのに最も良い方法は何ですか?

答えて

0

アクティビティとは独立した画像のアップロードを続行したいので、より長い/異なるライフタイムを持つ場所にサブスクリプションを保存すると意味があります。 Signletonsの一部として登録し、手動で登録を処理します。次に、姿勢変更後、アクティブなサブスクリプションをチェック:

if (Signletons.uploadSubscription != null) { 
    activeUploadSub = Signletons.uploadSubscription 
} 

別のソリューションは、アプリケーションのマニフェストの活動に属性を追加することにより、向きの変更のための活動を破壊避けるために、次のようになります。

android:configChanges="orientation|screenSize" 
-1

this answerによると、ちょうど活動が

@Override 
protected void onDestroy() { 
    super.onDestroy(); 
    if (isFinishing()) { 
     subscription.unsubscribe(); 
    } else { 
     //It's an orientation change. 
    } 
    } 
+0

を終了していない場合は退会どのように活動が再び再作成されたときに再サブスクライブするのに役立つのでしょうか? –

+0

あなたは正しいです。それは助けにならないでしょう。以前のものはunsubscribedされていないので、あなたはonCreateメソッドのObservableに再び登録することはできません。 – dwursteisen

+0

私はこの観察可能なものから退会しない場合、この観察可能なハンドラーは破壊される活動に留まります。結果が到着すると、破壊されたアクティビティで処理する必要はありません。さらに、活動が破壊されるのを防ぐことは、非常に高価な作業です。 –

関連する問題