Rxjava+Retrofit推荐文章:
http://www.jianshu.com/p/2b0aeb6b6b61/
http://www.jianshu.com/p/1fb294ec7e3b
导入对应的库
//需要的库
compile 'io.reactivex.rxjava2:rxjava:2.1.3'
compile 'io.reactivex.rxjava2:rxandroid:2.0.1'
//要求com.squareup.retrofit2:XXX:后面的版本一致这边用的是2.3.0
compile 'com.squareup.retrofit2:retrofit:2.3.0'
compile 'com.squareup.retrofit2:converter-jackson:2.3.0'
compile 'com.squareup.retrofit2:adapter-rxjava2:2.3.0'
遇到的第一个问题提示
Duplicate files copied in APK META-INF/LICENSE
解决方法
在android代码块中添加以下代码
android {
packagingOptions {
exclude 'META-INF/DEPENDENCIES'
exclude 'META-INF/NOTICE'
exclude 'META-INF/LICENSE'
exclude 'META-INF/LICENSE.txt'
exclude 'META-INF/NOTICE.txt'
}
}
Interface文件
public interface NetService {
//指定的是apiname如果没有apiname写成"."或"/"否则会报错
`Missing either @GET URL or @Url parameter.`
@GET("s")
Observable<String> getUserInfo(@Query("test") String p);
// @Field 必须和@FormUrlEncode一起使用 ,@FormUrlEncode要和@POST一起使用
}
在代码中的使用
getService().getUserInfo("123")
.subscribeOn(Schedulers.io())//在安卓中这个必须添加否则会报`NetworkOnMainThreadException`
.observeOn(AndroidSchedulers.mainThread())//将结果回调到Main线程
.subscribe(new Observer<String>() {//rxjava1使用的是Subscriber这里使用的是Observer
@Override
public void onSubscribe(@NonNull Disposable d) {
Log.e("MainActivity", "");
}
@Override
public void onNext(@NonNull String s) {
Log.e("MainActivity", s);
}
@Override
public void onError(@NonNull Throwable e) {
Log.e("MainActivity", "");
}
@Override
public void onComplete() {
Log.e("MainActivity", "");
}
});
getService中的代码
坑1:Could not locate call adapter for io.reactivex.Observable
坑2:Could not locate ResponseBody converter
private NetService getService() {
Retrofit retrofit = new Retrofit.Builder()
.addCallAdapterFactory(RxJava2CallAdapterFactory.create())//没有或添加错误会报`Could not locate call adapter for io.reactivex.Observable`异常
.addConverterFactory(JacksonConverterFactory.create())//没有添加报Could not locate ResponseBody converter异常
.baseUrl("http://www.baidu.com").build();
NetService service = retrofit.create(NetService.class);
return service;
}