2015-02-05 3 views
2

RxAndroid에서 Rx를 시작할 때 Retrofit이있는 API로 GitHub 사용자의 이름을 나열하고 싶습니다. 다음 API를 사용하고자하는 모든 사용자를 처리 한 후에 각 API 요청이 100 명의 사용자를 가져 오지만이를 수행하는 방법을 알지 못합니다. 누구든지 나를 도울 수 있니? RxAndroid : 관측 가능을 동기식으로 실행하십시오.

어디에 내 코드

개장 인터페이스

interface GitHubService { 
    @GET("/users") 
    List<User> users(@Query("since") int since); 
} 

사용자 클래스

class User { 
    private Integer id; 
    private String login; 

    public String getLogin() { 
     return login; 
    } 

    public Integer getId() { 
     return id; 
    } 
} 

의 일부 조각 그리고 내 활동에서 onCreate 방법이다

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 

    RequestInterceptor requestInterceptor = new RequestInterceptor() { 
     @Override 
     public void intercept(RequestFacade request) { 
      request.addHeader("User-Agent", "Retrofit-Sample-App"); 
      request.addHeader("Accept", "application/json"); 
     } 
    }; 

    RestAdapter restAdapter = new RestAdapter.Builder() 
      .setEndpoint("https://api.github.com") 
      .setRequestInterceptor(requestInterceptor) 
      .build(); 

    GitHubService mWebService = restAdapter.create(GitHubService.class); 

    mWebService.users().flatMap(new Func1<List<User>, Observable<User>>() { 
      @Override public Observable<User> call(List<User> users) { 
       return Observable.from(users); 
      } 
     }).flatMap(new Func1<User, Observable<String>>(){ 
      @Override public Observable<String> call(User user) { 
       return Observable.just(user.getId() + ": " + user.getLogin()); 
      } 
     }) 
     .subscribeOn(Schedulers.newThread()) 
     .observeOn(AndroidSchedulers.mainThread()) 
     .subscribe(new Observer<String>() { 
      @Override 
      public void onCompleted() { 
       Log.i("TEST", "EXIT"); 
      } 

      @Override 
      public void onError(Throwable e) { 
       Log.i("TEST", e.getLocalizedMessage()); 
      } 

      @Override 
      public void onNext(String s) { 
       Log.i("TEST", s); 
      } 
     }); 

} 

답변

0
BehaviorSubject<Integer> pagingSubject = BehaviorSubject.create(); 

    // subscribe to this observable and do with data whatever you want 
    Observable<List<User>> usersObservable = pagingSubject.flatMap(page -> mWebService.users(page)); 

    // fetch pages 
    pagingSubject.onNext(1); 
    pagingSubject.onNext(2); 

위와 같이 가져 오려는 페이지를 통과 시키려면 제목을 사용할 수 있습니다. 요청이 완료된 후 pagingSubject.onNext (page)를 호출 할 수 있습니다 (Github 사용자가 요청하는 방식을 확인하지 않았지만 응답시 다음 요청에 대해 "이후"매개 변수가 나타날 수 있음).

관련 문제