2017-05-02 1 views
2

Ich versuche Retrofit2 mit RxJava2 zu verwenden, hier ist Api:Retrofit2 nicht Anfrage senden (keine Protokollierung mit OkHttp)

public class App extends Application { 

    final String SERVER_ENDPOINT = "https://api.vk.com"; 

    private Retrofit mRetrofit; 
    private static ImageService mImageService; 
    HttpLoggingInterceptor httpLoggingInterceptor; 

    @Override 
    public void onCreate() { 

     super.onCreate(); 
     httpLoggingInterceptor = new HttpLoggingInterceptor(); 
     httpLoggingInterceptor.setLevel(HttpLoggingInterceptor.Level.BODY); 
     OkHttpClient okHttpClient = createClient(); 
     mRetrofit = new Retrofit.Builder() 
       .baseUrl(SERVER_ENDPOINT) 
       .client(okHttpClient) 
       .addConverterFactory(GsonConverterFactory.create()) 
       .addCallAdapterFactory(RxJava2CallAdapterFactory.create()) 
       .build(); 
     mImageService = mRetrofit.create(ImageService.class); 
    } 

    private OkHttpClient createClient() { 

     OkHttpClient.Builder builder = new OkHttpClient.Builder(); 
     builder.addInterceptor(httpLoggingInterceptor); 
     return builder.build(); 
    } 

    public static ImageService getImageService() { 

     return mImageService; 
    } 
} 

Das ist Service-Schnittstelle:

public interface ImageService { 

    @GET("/method/photos.get") 
    Observable<GetPhotoResponse> getImages(
      @Query("owner_id") int owner_id, 
      @Query("album_id") String album_id, 
      @Query("count") int count, 
      @Query("v") String version); 
} 

Wenn ich Aufruf Methode getImages(), keine OkHttp Protokollierung erscheint in logcat. Und Bilder Dont Download auf den imageviews

Es ist gradle.build:

//RxJava2 
    compile "io.reactivex.rxjava2:rxjava:2.1.0" 
    //Retrofit2 
    compile 'com.squareup.retrofit2:retrofit:2.2.0' 
    compile 'com.squareup.retrofit2:adapter-rxjava2:2.2.0' 
    compile 'com.squareup.retrofit2:converter-gson:2.2.0' 
    //Okhttp 
    compile 'com.squareup.okhttp3:okhttp:3.6.0' 
    compile 'com.squareup.okhttp3:logging-interceptor:3.6.0' 
    //Glide 
    compile 'com.github.bumptech.glide:glide:3.7.0' 
    //Gson 
    compile 'com.google.code.gson:gson:2.7' 
    //RecyclerView 
    compile 'com.android.support:recyclerview-v7:25.3.0' 

Was ist falsch mit ihm ?? Brauche Hilfe!

Der Code, wo ich Methode in Interactor nennen:

public Observable<GetPhotoResponse> downloadImages() { 

     Log.d("tag", "downloadImages: "); 
     return downloadImagesFromVK() 
       .doOnNext(getPhotoResponse -> { 
        Log.d("tag", "downloadImages: YESSS"); 
       }) 
       .doOnComplete(() -> { 
        Log.d("tag", "downloadImages: COMPLETE"); 
       }) 
       .doOnError(throwable -> { 
        Log.d("tag", "downloadImages: ERROR"); 
       }); 
    } 

    public Observable<GetPhotoResponse> downloadImagesFromVK() { 

     return imageService.getImages(
       VkConstants.OWNER_ID, 
       VkConstants.ALBUM_ID, 
       VkConstants.COUNT, 
       VkConstants.VK_API_VERSION); 
    } 

Moderator:

public void startDownloadImages() { 

     mMainView.showProgressBar(); 

     mInteractor.downloadImages() 
       .doOnNext(getPhotoResponse -> { 
        mMainView.setImagesToView(mInteractor 
          .getUrlsListMaxSize(getPhotoResponse)); 
       }) 
       .doOnError(throwable -> mMainView.showConnectionProblemError()); 
    } 
+1

können Sie den Code hinzufügen, unter dem Sie den Serviceanruf ausführen? – pablobu

+0

Nur den Code hinzugefügt, bitte sehen Sie – Koroqe

+0

wenn ich die App ausführen, nur "downloadImages:" erscheint in logcat – Koroqe

Antwort

3

doOnNext und doOnError sind Nebenwirkungen Ihres Abonnements, die noch geschehen muss. Die Kette gibt ein Observable zurück, das abonniert werden muss.

Versuchen Sie Ihren Code mit so etwas wie

mInteractor.downloadImages() 
       .subscribeOn(Schedulers.io()) 
       .observeOn(AndroidSchedulers.mainThread()) 
       .subscribe(getPhotoResponse -> { 
        mMainView.setImagesToView(mInteractor 
          .getUrlsListMaxSize(getPhotoResponse)); 
       }, e -> mMainView.showConnectionProblemError()); 

`

Das Abonnement ist, wo die Magie passiert und die beobachtbaren ausgelöst zu ersetzen seine Sachen zu tun.

+0

Ja, es funktioniert! Danke, fedepaol! Es ist wirklich magisch :) – Koroqe

+1

Froh, hilfsbereit zu sein :) – fedepaol

Verwandte Themen