2016-01-23 83 views
0

我想问一下如何使用Retrofit从2个json文件中获取数据。Android Retrofit - 如何从2个json文件中获取数据

现在我有适用于一个URL的应用程序。

我的服务:

public interface TestService { 

     @GET(url1) 
     Call<Pojo> getArray(); 
} 

进出口使用RecyclerView

Call<Pojo> getCall = mTestService.getArray(); 

    getCall.enqueue(new Callback<Pojo>() { 
     @Override 
     public void onResponse(Response<Pojo> response, Retrofit retrofit) { 
      mRecyclerView.setAdapter(new TestAdapter(response.body())); 
     } 

     @Override 
     public void onFailure(Throwable t) { 

     } 
    }); 

,它工作正常,但我想文件从2个网址添加到RecyclerView。有任何想法吗?也许分页?从一个JSON加载数据后,加载第二个JSON?

回答

0

如果您需要依次显示来自两个端点的数据,请在滚动后将第二部分加载到RecyclerView的末尾。但是,当您需要合并数据时,最好使用RxJava和Observables将这两个请求合并起来,然后再将它们提供给适配器。

改装2已经支持使用呼叫适配器作为观察对象返回数据,请参阅this blog post以了解设置的详细信息。您的服务应该是这样的整合RxJava后:

public interface TestService { 
    @GET(url1) 
    Observable<Pojo> getArray1(); 

    @GET(url2) 
    Observable<Pojo> getArray2(); 
} 

之后,您可以使用合并操作在用户创建TestAdapter前两者结合调用的结果。使用合并时,您必须记住,首先返回的调用中的数据将成为结果列表中的第一个。

getArray1().mergeWith(getArray2()).toList() 
    .subscribeOn(Schedulers.io()) 
    .observeOn(AndroidSchedulers.mainThread()) 
    .subscribe(new Subscriber<List<Pojo>>() { 
     @Override 
     public void onCompleted() { } 

     @Override 
     public void onError(Throwable e) { } 

     @Override 
     public void onNext(List<Pojo> pojoList) { 
      mRecyclerView.setAdapter(new TestAdapter(pojoList)); 
     } 
    }); 

正如你所看到的,你的TestAdapter需要在Pojo对象的列表上进行操作。由于RxJava起初很难理解,我建议你阅读danlew的Grokking RxJava series

相关问题