2017-12-20 24 views
0

예를 들어, 작업을 마치고 결과를 반환합니다.이 작업은 onActivityResult 메서드에서 반환됩니다. 결과가 onActivityResult에 의해 제공되기 전에 어떻게 기다린 다음 반응성 스트림을 계속 진행할 수 있습니까?RxJava를 사용하여 다른 메서드를 호출하기 전에 기다리는 방법

public class TestActivity extends AppCompatActivity { 

    ... 

    @Override 
    protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
     super.onActivityResult(requestCode, resultCode, data); 
     // receiving result here 
    } 

    private Single<Data> loadData() { 
     return Remote.getInstance().getData() 
       .flatMap(data -> { 
        // do something 
        Intent intent = new Intent(TestActivity.this, OtherActivity.class); 
        startActivityForResult(intent, 0); 

       }) // how can I receive the result from the onActivityResult here? 
    } 
} 
+0

"어떻게하면 결과를 얻을 수 있습니까?"뭔가를하고 싶습니다. "onActivityResult 메서드 내에서"무언가 "활동을 계속하지 않는 이유는 무엇입니까? –

답변

0

그것은 onActivityResult()에 알릴 것이라고 PublishSubject를 사용하여 예를 들어 수있을 것이며, 이는 당신이 원래의 호출에 flatMap()을 거라고하는 하지만 나는이에 대하여 강력하게 조언을 것입니다. 이유는 다음과 같습니다.

ActivityonActivityResult()을 수신 할 때 구성 변경, 메모리 부족 또는 그 사이에 발생한 다른 이유로 인해 처음부터 다시 작성되었을 수 있습니다. 즉, Single 구독이 더 이상 활성화되지 않았거나 (onDestroy() 이상, onStop()) 정상적인 액티비티 인스턴스가 유출 된 것으로 간주됩니다 (탈퇴하지 않은 경우).

따라서 스트림 (및 상기 언급 된 PublishSubject)은 보존 된 조각과 같이 활동 레크리에이션에서 살아남은 구성 요소 내에 있어야하며 결과물에 대해 스트림에 알리기 위해 onActivityResult()의 스트림으로 호출해야합니다. 여기에 some example 조각과 RxJava가 함께 작동 할 수있는 방법이 있습니다.