2016-07-04 11 views
1

Я пытаюсь реализовать RxJava и Retrofit2. Но я получаю эту java.lang.IllegalArgumentException ошибке: Не удается создать адаптер для вызова rx.ObservableОшибка при использовании Retrofit и Rxjava

Вот мой код: - MainActivity

public class MainActivity extends AppCompatActivity { 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
    Button bFetch = (Button) findViewById(R.id.button_fetch); 
    assert bFetch != null; 
    bFetch.setOnClickListener(new View.OnClickListener() { 
     public void onClick(View v) { 

      GithubService service; 

      final Retrofit retrofit = new Retrofit.Builder() 
        .baseUrl(GithubService.SERVICE_ENDPOINT) 
        .addConverterFactory(GsonConverterFactory.create()) 
        .build(); 

      service = retrofit.create(GithubService.class); 

      Observable<Github> observable = service.getUser("writingminds"); 
      observable.subscribeOn(Schedulers.newThread()) 
        .observeOn(AndroidSchedulers.mainThread()) 
        .subscribe(new Subscriber<Github>() { 
         @Override 
         public final void onCompleted() { 
          // do nothing 
         } 

         @Override 
         public final void onError(Throwable e) { 
          Log.e("GithubDemo", e.getMessage()); 
         } 

         @Override 
         public final void onNext(Github response) { 
          Log.e("---%s", response.getBlog()); 
          Log.e("--%s", response.getLogin()); 
         } 
        }); 
     } 
    }); 
} 

}

А вот мой интерфейс GithubService

public interface GithubService { 
String SERVICE_ENDPOINT = "https://api.github.com"; 

@GET("https://stackoverflow.com/users/{login}") 
Observable<Github> getUser(@Path("login") String login); 
} 

Вот моя модель:

public class Github { 
private String login; 
private String blog; 
private int public_repos; 

public String getLogin() { 
    return login; 
} 

public String getBlog() { 
    return blog; 
} 

public int getPublicRepos() { 
    return public_repos; 
    } 
} 

Спасибо заранее

ответ

2

вам нужно сказать Дооснащение, вы хотите использовать RxJava. Вы можете сделать это с помощью

addCallAdapterFactory(RxJavaCallAdapterFactory.create()) 

Eg

final Retrofit retrofit = new Retrofit.Builder() 
    .baseUrl(GithubService.SERVICE_ENDPOINT) 
    .addCallAdapterFactory(RxJavaCallAdapterFactory.create()) 
    .addConverterFactory(GsonConverterFactory.create()) 
    .build(); 

вам придется добавить

compile 'com.squareup.retrofit2:adapter-rxjava:2.1.0' 

в список build.gradle зависимостей, если вы не сделали это уже

+1

спасибо @Черный пояс – Ghost

Смежные вопросы