无法从Rxjava Retrofit检索响应

时间:2018-01-12 16:31:19

标签: android rx-java retrofit2 rx-android

我想得到回应,但我没有得到它。我也没有收到任何错误。我做错了什么? 通过jsonscema2Pojo.org制作POJO

可能是我打电话的方式

 @GET("16126940.json")
 Observable <NewsFeed> getFinalData(); 
在soservice中

是错误的

我正在处理下面的json

{
  "by": "Doubleguitars",
  "descendants": 70,
  "id": 16126940,
  "kids": [
   16131536,
   16131286,
   16132328,
   16132016,
   16132256,
   16131390,
   16132386,
   16132049,
   16132088,
   16132206,
   16132895,
   16131438,
   16132082,
   16132859,
   16131517,
   16131474,
   16133112
 ],
  "score": 173,
  "time": 1515698746,
  "title": "The Making of Apple’s Emoji",
  "type": "story",
  "url": "https://medium.com/@agzmn/the-making-of-apples-emoji-how-
  designing-these-tiny-icons-changed-my-life-16317250a9ee"
 }

我的活动代码

 public void loadNextDataFromApi(int itemCount) {
    mService = ApiUtils.getSOService2();
}

public void loadAnswers(){
   mService.getFinalData().subscribeOn(Schedulers.io()).
  observeOn(AndroidSchedulers.mainThread())
                .subscribe(new Subscriber<NewsFeed>() {
                    @Override
                    public void onCompleted() { }
                    @Override
                    public void onError(Throwable e) {   }
                    @Override
                    public void onNext(NewsFeed response) {
                        Log.e("response", "response------------------>" + 
                       response.toString());
                    }
                });
}

改造客户

public class RetrofitClient {

private static Retrofit retrofit = null;

public static Retrofit getClient(String baseUrl) {
    if (retrofit==null) {
        retrofit = new Retrofit.Builder()
                .baseUrl(baseUrl)
                .addCallAdapterFactory(RxJavaCallAdapterFactory.create())
                .addConverterFactory(GsonConverterFactory.create())
                .build();
    }
        return retrofit;
}
}

我的服务

public interface SOService {
    @GET("16126940.json")
    Observable <NewsFeed> getFinalData();
}
Utility中的

我保留了方法调用

 public static final String HTTP_JSON_URL = "https://hackernews.firebaseio.com/v0/item/";
 public static SOService getSOService2() {
    return RetrofitClient.getClient(HTTP_JSON_URL).create(SOService.class); 
}

1 个答案:

答案 0 :(得分:0)

可能会忽略您的错误,因为我可以看到您的onError为空。当您使用RxJava和Retrofit命中服务时。结果将成功或落地。所以onError不应该是空白的。至少放e.printStackTrace()。并确保已调用方法loadAnswers()。您提供的代码没有名为..

的方法
@Override
public void onError(Throwable e) {   
 e.printStackTrace()
}

我认为你需要在下面的方法中调用load answer方法。

 public void loadNextDataFromApi(int itemCount) {
    mService = ApiUtils.getSOService2();
    loadAnswers();
}