2016-06-30 73 views
0

我試圖做一個非常基本的Retrofit/RxJava設置。所以我試圖消費這個API:http://jsonplaceholder.typicode.com/posts無法創建通話適配器rx.Observable <POJO>

我的基本設置如下;

我的改裝服務:

public interface SimpleTestService { 
    String endpoint = "jsonplaceholder.typicode.com"; 

    @GET("/posts") 
    Observable<Post> getPosts(); 
} 

創建服務:

public class TestAdapter { 
    public static SimpleTestService createService() { 
     Retrofit retrofit = new Retrofit.Builder() 
       .baseUrl("http://wwww.jsonplaceholder.typicode.com") 
       .addCallAdapterFactory(RxJavaCallAdapterFactory.create()) 
       .addConverterFactory(GsonConverterFactory.create()) 
       .build(); 

     SimpleTestService service = retrofit.create(SimpleTestService.class); 
     return service; 
    } 
} 

使我的電話:

SimpleTestService testService = TestAdapter.createService(); 
    testService.getPosts() 
      .subscribeOn(Schedulers.newThread()) 
      .observeOn(AndroidSchedulers.mainThread()) 
      .subscribe(new Subscriber<Post>() { 
       @Override 
       public void onCompleted() { 

       } 

       @Override 
       public void onError(Throwable e) { 

       } 

       @Override 
       public void onNext(Post post) { 
        String text = testText.getText().toString(); 
        text += post.getBody(); 
        testText.setText(text); 
       } 
      }); 

當我嘗試這樣做,我得到異常:

java.lang.IllegalArgumentException: Unable to create call adapter for rx.Observable<Post> 

這對我來說很奇怪,因爲我明確地添加了RX呼叫適配器。我也包括所有這些東西在我的build.gradle

任何提示?

謝謝!

+0

你能請張貼安置自己的POJO創建服務? –

+0

POJO是一個包含3個字段(所有字符串)的基本類,一個構造函數和所有變量的getter/setter。而已。 POJO匹配API輸出的JSON。我是否需要添加特定於POJO的內容來完成此項工作? @MuraliPrajapati –

+0

一切看起來都很好。你能告訴我引起異常的線嗎? –

回答

1

更改SimpleTask服務到這

public interface SimpleTestService { 
String endpoint = "http://jsonplaceholder.typicode.com"; 

@GET("/posts") 
Observable<List<Post>> getPosts(); 
} 

通過改變基本URL

public class TestAdapter { 
     public static SimpleTestService createService() { 
      Retrofit retrofit = new Retrofit.Builder() 
        .baseUrl(SimpleTestService .endpoint) 
        .addCallAdapterFactory(RxJavaCallAdapterFactory.create()) 
        .addConverterFactory(GsonConverterFactory.create()) 
        .build(); 

      SimpleTestService service = retrofit.create(SimpleTestService.class); 
      return service; 
     } 
    } 

您的通話就像

SimpleTestService testService = TestAdapter.createService(); 
testService .getPosts().subscribeOn(Schedulers.io()) 
     .observeOn(AndroidSchedulers.mainThread()) 
     .flatMap(new Func1<List<Post>, Observable<Post>>() { 
      @Override 
      public Observable<Post> call(List<Post> posts) { 
       return Observable.from(posts); 
      } 
     }) 
     .subscribe(new Observer<Post>() { 
      @Override 
      public void onCompleted() { 

      } 

      @Override 
      public void onError(Throwable e) { 

      } 

      @Override 
      public void onNext(Post post) { 
       String text = testText.getText().toString(); 
       text += post.getBody(); 
       testText.setText(text); 
      } 
     }); 
+0

謝謝!就是這樣。試圖解析一個對象,而不是一個列表。 –

+0

高興地幫助你。 –

相關問題