2017-12-27 13 views
0

Ich bin neu in der Verwendung von RxJava und ich habe Fragen dazu, wie kann ich meinen neuen Callback von Retrofit auf RxJava ändern?RxJava statt Retrofit Callback

Mein Arbeits Code ist hier:

Service service = new Retrofit.Builder() 
      .baseUrl("lalala") 
      .addConverterFactory(GsonConverterFactory.create()) 
      .build() 
      .create(Service.class); 

Und danach schreibe ich

Call<Board> call = service.getBoard("lalala"); 

call.enqueue(new Callback<Board>() { 
         @Override 
         public void onResponse(Call<Board> call, Response<Board> response) { 
          if (response.isSuccessful()) { 
           recyclerView.setAdapter(new BoardAdapter(MainActivity.this, response.body().getThreads())); 
          } 
         } 

         @Override 
         public void onFailure(Call<Board> call, Throwable t) { 
          Toast.makeText(MainActivity.this, "error :(", Toast.LENGTH_SHORT).show(); 
         } 
        });*/ 

Aber wenn ich es auf RxJava verwenden möchten, ich verstehe nicht, wie es zu tun. Ich habe es versucht.

service.getRxBoard(boardq) 
      .subscribeOn(Schedulers.io()) 
      .observeOn(AndroidSchedulers.mainThread()) 
      .subscribe(new Consumer<Board>() { 
          @Override 
          public void accept(Board board) throws Exception { 
           recyclerView.setAdapter(new BoardAdapter(MainActivity.this, board.getThreads())); 
          } 
         }, new Consumer<Throwable>() { 
          @Override 
          public void accept(Throwable throwable) throws Exception { 
           Toast.makeText(MainActivity.this, "error :(", Toast.LENGTH_SHORT).show(); 

          } 
         }); 

Und es funktioniert nicht. Ich erhalte eine Ausnahme:

java.lang.RuntimeException: Unable to start activity ComponentInfo 
Unable to create call adapter for io.reactivex.Observable 

Antwort

0

Sie benötigen einen Anruf Adapter Fabrik mit Retrofit zu registrieren, die RxJava Typen erstellen können.

This is the library you need. Fügen Sie es zu Ihrem build.gradle wie so:

compile 'com.squareup.retrofit2:adapter-rxjava2:2.3.0' 

Dann, wenn Sie Ihre Retrofit Instanz bauen, fügen Sie den Adapter ab Werk wie folgt:

Retrofit.Builder() 
    .baseUrl("https://example.com/") 
    .addCallAdapterFactory(RxJava2CallAdapterFactory.create()) 
    .build();