版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_24675479/article/details/79846406
基于这篇文章进行封装https://blog.csdn.net/qq_24675479/article/details/79831828
添加依赖
compile 'com.squareup.retrofit2:retrofit:2.3.0'
compile 'com.squareup.retrofit2:converter-gson:+'
compile 'com.squareup.okhttp3:logging-interceptor:+'
compile 'com.squareup.retrofit2:adapter-rxjava:+'
compile 'io.reactivex:rxandroid:1.2.0'
compile 'com.squareup.okhttp3:okhttp:3.9.1'
ServiceApi进行修改
public interface ServiceApi {
@GET("is_login")//Query代表你要查询的字段名字
Observable<Result<UserInfo>> userlogin(@Query("username") String userName, @Query("password") String password);
}
第一种写法
RetrofitClient.getServiceApi().userlogin("测试专用", "HB654321")
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(new Subscriber<Result<UserInfo>>() {
@Override
public void onCompleted() {
}
@Override
public void onError(Throwable e) {
e.printStackTrace();
}
@Override
public void onNext(Result<UserInfo> userInfoResult) {
Log.e("TAG",userInfoResult.getMsg().toString());
}
});
第二种写法
RetrofitClient.getServiceApi().userlogin("测试专用", "HB654321")
//subscribeOn().observeOn().subscribe()
// subscribeOn().observeOn()
.compose(RetrofitClient.<UserInfo>transformer())
.subscribe(new BaseSubscriber<UserInfo>() {
@Override
protected void onError(String code, String message) {
Log.e("TAG", message);
}
@Override
public void onNext(UserInfo userInfo) {
//Log.e("TAG", userInfo.toString());
Toast.makeText(MainActivity.this, userInfo.toString(), Toast.LENGTH_SHORT).show();
}
});
修改retrofitClient
public class RetrofitClient {
private static final ServiceApi mServiceApi;
static {
OkHttpClient okHttpClient = new OkHttpClient.Builder().
addInterceptor(new HttpLoggingInterceptor(new HttpLoggingInterceptor.Logger() {
@Override
public void log(String message) {
//默认是Log.d修改成Log.e
Log.e("Retorfit", message);
}
}).setLevel(HttpLoggingInterceptor.Level.BODY)).build();
Retrofit retrofit = new Retrofit.Builder()
.baseUrl("http://app.ahhuabang.com:8088/server/index.php/user/")
// 添加解析转换工厂,Gson 解析,Xml解析,等等
.addConverterFactory(GsonConverterFactory.create())
//不设置默认的是okHttp
.client(okHttpClient)
.addCallAdapterFactory(RxJavaCallAdapterFactory.create())
.build();
mServiceApi = retrofit.create(ServiceApi.class);
}
public static ServiceApi getServiceApi() {
return mServiceApi;
}
public static <T> Observable.Transformer<Result<T>, T> transformer() {
return new Observable.Transformer<Result<T>, T>() {
@Override
public Observable<T> call(Observable<Result<T>> resultObservable) {
// resultObservable -> Observable<Result<UserInfo>> userLogin
return resultObservable.flatMap(new Func1<Result<T>, Observable<T>>() {
@Override
public Observable<T> call(Result<T> tResult) {
// 解析不同的情况返回
if (tResult.isOk()) {
// 返回成功
return createObservable(tResult.data);
} else {
// 返回失败
return Observable.error(new ErrorHandle.ServiceError("", tResult.getMsg()));
}
}
}).subscribeOn(Schedulers.io()).unsubscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread());
}
};
}
private static <T> Observable<T> createObservable(final T data) {
return Observable.create(new Action1<Emitter<T>>() {
@Override
public void call(Emitter<T> tEmitter) {
tEmitter.onNext(data);
tEmitter.onCompleted();
}
}, Emitter.BackpressureMode.NONE);
}
}
BaseSubscriber
public abstract class BaseSubscriber<T> extends Subscriber<T> {
@Override
public void onCompleted() {
}
@Override
public void onError(Throwable e) {
e.printStackTrace();
if(e instanceof ErrorHandle.ServiceError){
ErrorHandle.ServiceError serviceError = (ErrorHandle.ServiceError) e;
onError("409",serviceError.getMessage());
}else{
onError("","未知错误"+e);
}
}
protected abstract void onError(String code, String message);
}
ErrorHandle服务器错误
public class ErrorHandle {
public static class ServiceError extends Throwable {
String errorCode;
public ServiceError(String code, String msg) {
super(msg);
this.errorCode = code;
}
}
}