2017-08-10 14 views
0

サンプルRxjava-Retrofit Appを実行しようとしています。私は、入力されたに基づいてOpenWeatherMapRx-Javaレトロフィットが応答しない

マイ改造アピインタフェースはエディットテキストに地名を入力する必要があり、この

public interface ApiInterface { 
    @GET("data/2.5/weather?appid=11111111111") 
    Observable<WeatherData> getWeather(@Query("q") String place); 
} 

ユーザーのように見えます

からユーザが入力した場所の気象情報をフェッチAPIを、持っています地名私はAPIを呼び出します。ここに私のコード全体

BehaviorSubject<String> mStringSubject = BehaviorSubject.create(); 

だときにユーザタイプ何か

@Override 
public boolean onQueryTextChange(String newText) { 
    mStringSubject.onNext(newText); 
    return true; 
} 

、その後

mStringSubject 
      .debounce(500, TimeUnit.MILLISECONDS) 
      .doOnNext(s -> Log.d(TAG, s)) 
      .flatMap(s -> mApiInterface.getWeather(s)) 
      .subscribeOn(Schedulers.newThread()) 
      .observeOn(AndroidSchedulers.mainThread()) 
      .onErrorReturn(throwable -> null) 
      .subscribe(new Observer<WeatherData>() { 
       @Override 
       public void onSubscribe(@NonNull Disposable d) { 
        Log.d(TAG, "onSubscribe: "); 
       } 

       @Override 
       public void onNext(@NonNull WeatherData weatherData) { 
        Log.d(TAG, "onNext: " + weatherData); 
       } 

       @Override 
       public void onError(@NonNull Throwable e) { 
        Log.d(TAG, "onError: " + e.getMessage()); 
       } 

       @Override 
       public void onComplete() { 
        Log.d(TAG, "onComplete: "); 
       } 
      }); 

このコードに何か問題がありますか?何らかの理由で、ログに何も表示されません。私は何か間違っているのですか?

注:私が行うとき

mStringSubject 
      .debounce(500, TimeUnit.MILLISECONDS) 
      .subscribe(s -> Log.d(TAG, s)); 

その適切にユーザーの入力値を印刷します。

答えて

0

お試しください

最初にメインスレッドから移動し、IOスレッドでサービスコールを行います。

mStringSubject 
      .debounce(500, TimeUnit.MILLISECONDS) 
      .subscribeOn(Schedulers.computation())) 
      .doOnNext(s -> Log.d(TAG, s)) 
      .flatMap(s -> mApiInterface.getWeather(s)) 
      .subscribeOn(Schedulers.io()) 
      .observeOn(AndroidSchedulers.mainThread()) 
関連する問題