Retrofit2 不发送请求(不使用 OkHttp 记录)
Retrofit2 dont send request (no logging with OkHttp)
我正在尝试将 Retrofit2 与 RxJava2 一起使用,这里是 Api:
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;
}
}
即服务接口:
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);
}
当我调用方法 getImages() 时,logcat 中没有出现 OkHttp 日志记录。图片不下载到 imageviews
有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'
这是怎么回事??需要帮助!
我在交互器中调用方法的代码:
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);
}
主持人:
public void startDownloadImages() {
mMainView.showProgressBar();
mInteractor.downloadImages()
.doOnNext(getPhotoResponse -> {
mMainView.setImagesToView(mInteractor
.getUrlsListMaxSize(getPhotoResponse));
})
.doOnError(throwable -> mMainView.showConnectionProblemError());
}
doOnNext 和 doOnError 是您订阅的副作用,仍然需要发生。链returns一个需要订阅的Observable。
尝试用
之类的东西替换您的代码
mInteractor.downloadImages()
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(getPhotoResponse -> {
mMainView.setImagesToView(mInteractor
.getUrlsListMaxSize(getPhotoResponse));
}, e -> mMainView.showConnectionProblemError());
`
订阅是魔法发生的地方,可观察对象被触发去做它的事情。
我正在尝试将 Retrofit2 与 RxJava2 一起使用,这里是 Api:
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;
}
}
即服务接口:
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);
}
当我调用方法 getImages() 时,logcat 中没有出现 OkHttp 日志记录。图片不下载到 imageviews
有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'
这是怎么回事??需要帮助!
我在交互器中调用方法的代码:
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);
}
主持人:
public void startDownloadImages() {
mMainView.showProgressBar();
mInteractor.downloadImages()
.doOnNext(getPhotoResponse -> {
mMainView.setImagesToView(mInteractor
.getUrlsListMaxSize(getPhotoResponse));
})
.doOnError(throwable -> mMainView.showConnectionProblemError());
}
doOnNext 和 doOnError 是您订阅的副作用,仍然需要发生。链returns一个需要订阅的Observable。
尝试用
之类的东西替换您的代码mInteractor.downloadImages()
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(getPhotoResponse -> {
mMainView.setImagesToView(mInteractor
.getUrlsListMaxSize(getPhotoResponse));
}, e -> mMainView.showConnectionProblemError());
`
订阅是魔法发生的地方,可观察对象被触发去做它的事情。