一个注册和登陆接口
public interface LoginApi {
@FormUrlEncoded
@POST("user/login")
Observable<HttpResult<LoginBean>> login(@FieldMap Map<String, Object> params);
@FormUrlEncoded
@POST("user/register")
Observable<HttpResult<LoginBean>> register(@FieldMap Map<String, Object> params);
}
配置Retrofit
HttpLoggingInterceptor httpLoggingInterceptor = new HttpLoggingInterceptor("ancelyOkhttp:");
httpLoggingInterceptor.setPrintLevel(HttpLoggingInterceptor.Level.BODY);
httpLoggingInterceptor.setColorLevel(Level.INFO);
// 初始化okhttp
OkHttpClient.Builder builder = new OkHttpClient.Builder()
.addInterceptor(new ProgressInterceptor())
.addInterceptor(chain -> {
//默认添加 Accept-Language
//默认添加 User-Agent
Request.Builder builder1 = chain.request().newBuilder();
addHeards(builder1);
Request request = builder1
.addHeader("Content-type", "application/json; charset=utf-8")
.addHeader("Accept", "application/json")
.build();
return chain.proceed(request);
})
.addInterceptor(httpLoggingInterceptor)
.readTimeout(60000, TimeUnit.MILLISECONDS)
.writeTimeout(60000, TimeUnit.MILLISECONDS)
.connectTimeout(60000, TimeUnit.MILLISECONDS);
if (interceptors != null && interceptors.size() > 0) {
for (Interceptor interceptor : interceptors) {
if (interceptor != null) builder.addInterceptor(interceptor);
}
}
builder.cookieJar(new CookieManger(getContext()))
.retryOnConnectionFailure(true);
if (sslParams != null)
builder.sslSocketFactory(sslParams.sSLSocketFactory, sslParams.trustManager);
mClient = builder.build();
// 初始化Retrofit
retrofit = new Retrofit.Builder()
.client(mClient)
.baseUrl(host)
.addCallAdapterFactory(RxJava2CallAdapterFactory.create())
.addConverterFactory(ScalarsConverterFactory.create())
.addConverterFactory(GsonConverterFactory.create())
.build();
获取Retrofit
public Retrofit getRetrofit() {
return retrofit;
}
最后执行注册再登录
Disposable subscribe = NetWorkManager.getInstance().getRetrofit()
.create(LoginApi.class)
//第一步,请求服务器 开始注册
.register(new HashMap<>())
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
//注册完之后,更新注册UI
.doOnNext(new Consumer<HttpResult<RegisterBean>>() {
@Override
public void accept(HttpResult<RegisterBean> loginBeanHttpResult) throws Exception {
//第二步,注册成功,更新注册成功相关UI
}
})
//马上去请求登陆请求
.subscribeOn(Schedulers.io())//给上游戏分配io线程
.flatMap(new Function<HttpResult<RegisterBean>, ObservableSource<HttpResult<LoginBean>>>() {
@Override
public ObservableSource<HttpResult<LoginBean>> apply(HttpResult<RegisterBean> registerBeanHttpResult) throws Exception {
//这里可以拿到注册的信息,然后去执行登录操作
//第三步,马上去请求登录操作
Observable<HttpResult<LoginBean>> login = NetWorkManager.getInstance().getRetrofit()
.create(LoginApi.class)
.login(new HashMap<>());
return login;
}
})
//登陆完之后,开始更新登陆UI
.observeOn(AndroidSchedulers.mainThread())//把线程切换过来
.subscribe(new Consumer<HttpResult<LoginBean>>() {
@Override
public void accept(HttpResult<LoginBean> loginBeanHttpResult) throws Exception {
//第四步,登陆成功,更新成功后的UI
//这里就可以操作登陆成功的操作
}
});
上面就是一个从上到下的链式编程,也叫卡片式编程