2015-02-02 2 views
2

내 Android 앱에 Retrofit 라이브러리를 사용하여 HTTP 호출을합니다. Callback 방법을 사용하여 결과에 액세스합니다. 즉 비동기 모드에서 실행합니다. 내가 methodA()에서 결과를받은 때Android - 순차적으로 비동기 메소드 실행

이제, 일부 Retrofit 호출이 이전 Retrofit 호출의 결과에 따라 달라집니다, 즉, 난 단지 methodB()를 호출 할 수 있습니다.

IntentService을 구현하고 거기에 Retrofit 메서드를 호출하는 것에 대해 생각했지만 내가 원하는 것을 성취하기 위해 매우 우아하지 않습니다.

이 비동기 호출이 동기화되도록 우아하고 나은 방법이 있습니까?

+0

동기화 모드에서 개조 된 인텐시브 서비스가 좋다면, 통화가 하나의 활동과 관련되어 있으면 asynctask를 사용할 수도 있습니다. 그렇지 않으면 이전 메서드의 콜백에서 다음 메서드를 호출해야합니다 (몇 단계가 지나면 읽기가 어려울 수 있음). 또는 단일 스레드 실행 프로그램을 사용할 수 있습니다 (http://square.github.io 참조). /retrofit/javadoc/retrofit/RestAdapter.Builder.html#setExecutors-java.util.concurrent.Executor-java.util.concurrent.Executor-)하지만 귀하의 경우에는 적절하지 않은 것 같습니다. – njzk2

+0

'IntentService'로 이동합니다. 최후의 수단으로'IntentService' 방법을 사용하려고하므로 코드 디자인의 일부분을 변경하도록 강요하십시오. 저는 모두 비동기식 Retrofit으로 설정되었지만 API 변경으로 인해 다른 메소드에서 결과를 얻은 후에 실행해야하는 메소드가 필요합니다. 그래서 난 내 코드 디자인에 가능한 적은 변화 로이 문제를 해결하기 위해 노력하고있어. 그럼에도 불구하고 귀하의 의견에 감사드립니다. – dazito

+0

당신은 RxJava를 살펴볼 수 있습니다. Observables를 사용하여 값의 연결을 허용합니다. Jake Wharton의 프레젠테이션을 참조하십시오. https://speakerdeck.com/jakewharton/2014-1 – njzk2

답변

3

동기화 모드에서 Retrofit을 사용하고 IntentService에서 동기화 호출을 실행했습니다.

의견에서 njzk2가 지적한 다른 해결책은 callback에서 비동기 작업을 호출 할 수 있지만 코드를 거의 읽을 수 없게 만들 수있는 중첩 된 코드로 이어질 수 있습니다.

보다 나은 접근 방식에 관심이 있으시면 언제든지 Retrofit을 동기화 모드로 사용하십시오.

관련 문제