//Rxjava
implementation 'io.reactivex.rxjava2:rxjava:2.2.6'
implementation 'io.reactivex.rxjava2:rxandroid:2.1.1'
//okhttp3
implementation 'com.squareup.okhttp3:okhttp:3.11.0'
//日志
implementation 'com.squareup.okhttp3:logging-interceptor:3.10.0'
//—— Retrofit
implementation 'com.squareup.retrofit2:retrofit:2.6.2'
implementation 'com.squareup.retrofit2:converter-gson:2.6.2'
implementation 'com.squareup.retrofit2:adapter-rxjava2:2.6.2'
implementation 'com.blankj:utilcode:1.27.2'
定义接口数据
public interface Api {
//http://www.qubaobei.com/ios/cf/dish_list.php?stage_id=1&limit=20&page=1 油闷大虾串'
//@Query 单个参数的key值
//@QueryMap map集合
@GET("dish_list.php")
Observable<FoodBean> foodList(@Query("stage_id") int stage_id, @Query("limit") int limit, @Query("page") int page);
@FormUrlEncoded
@POST("/hornetUser/login")
Observable<UserBean> login(@Field("username") String username, @Field("user_password") String pwd);
@POST("/hornetUser/register")
Observable<UserBean> register(@Body RequestBody body);
}
封装网络请求
package com.example.aa;
import java.util.concurrent.TimeUnit;
import okhttp3.OkHttpClient;
import okhttp3.logging.HttpLoggingInterceptor;
import retrofit2.Retrofit;
import retrofit2.adapter.rxjava2.RxJava2CallAdapterFactory;
import retrofit2.converter.gson.GsonConverterFactory;
public class RetrofitManager {
private static RetrofitManager manager;
public static synchronized RetrofitManager getManager() {
if (manager == null) {
manager = new RetrofitManager();
}
return manager;
}
private Retrofit retrofit;
public Retrofit getRetrofit() {
if (retrofit == null) {
create();
}
return retrofit;
}
private void create() {
HttpLoggingInterceptor interceptor = new HttpLoggingInterceptor();
interceptor.setLevel(HttpLoggingInterceptor.Level.BODY);
OkHttpClient.Builder okBuilder = new OkHttpClient.Builder();
okBuilder.addInterceptor(interceptor);
okBuilder.connectTimeout(2, TimeUnit.MINUTES);
okBuilder.readTimeout(2, TimeUnit.MINUTES);
okBuilder.writeTimeout(2, TimeUnit.MINUTES);
Retrofit.Builder builder = new Retrofit.Builder();
//请求链接前缀,所有接口不变到部分,者字符串必须以/结尾
//http://www.qubaobei.com/ios/cf/
//http://172.81.227.127:8044/
builder.baseUrl("http://www.qubaobei.com/ios/cf/");
//用于做网络请求到客户端(okHttp3)
builder.client(okBuilder.build());
//解析工程,可以帮我们把数据直接解析成对象
builder.addConverterFactory(GsonConverterFactory.create());
//异步回调适配工程
builder.addCallAdapterFactory(RxJava2CallAdapterFactory.create());
retrofit = builder.build();
}
}
具体方法使用
public void onClick(View view) {
switch (view.getId()) {
case R.id.bt1:
//被观察者 <T> 被观察者和观察者交互数据类型
Observable<String> observable = new Observable<String>() {
//订阅 Observer 观察者 可以完成观察者的通知
@Override
protected void subscribeActual(Observer<? super String> observer) {
observer.onNext("小偷上车了");
observer.onNext("发现美女");
observer.onNext("偷包!");
observer.onComplete();
}
};
//被观察者在那个线程执行
observable.subscribeOn(Schedulers.io());
//观察者在那个线程执行 AndroidSchedulers.mainThread()主线程
observable.observeOn(AndroidSchedulers.mainThread());
//通过subscribe操作符 完成观察者与被观察者的订阅
observable.subscribe(new Observer<String>() {
@Override
public void onSubscribe(Disposable d) {
}
@Override
public void onNext(String s) {
Log.d("---", "" + s);
}
@Override
public void onError(Throwable e) {
}
@Override
public void onComplete() {
Log.d("---", "Complete");
}
});
break;
case R.id.bt2:
Observable.just("小偷上车了", "发现美女")
.observeOn(AndroidSchedulers.mainThread())
.subscribeOn(Schedulers.io())
.subscribe(new Observer<String>() {
@Override
public void onSubscribe(Disposable d) {
}
@Override
public void onNext(String s) {
Log.d("===", "" + s);
}
@Override
public void onError(Throwable e) {
}
@Override
public void onComplete() {
}
});
break;
case R.id.bt3:
//多线程合并
//上传头像
Observable<String> uploadOb = new Observable<String>() {
@Override
protected void subscribeActual(Observer<? super String> observer) {
observer.onNext("上传中");
observer.onComplete();
}
};
//修改回调
Observable<String> updataInfoOb = new Observable<String>() {
@Override
protected void subscribeActual(Observer<? super String> observer) {
observer.onNext("修改信息中");
observer.onComplete();
}
};
Observable.merge(uploadOb, updataInfoOb)
.observeOn(AndroidSchedulers.mainThread())
.subscribeOn(Schedulers.io())
.subscribe(new Observer<String>() {
@Override
public void onSubscribe(Disposable d) {
}
@Override
public void onNext(String s) {
Log.d("+++", "" + s);
}
@Override
public void onError(Throwable e) {
}
@Override
public void onComplete() {
//一二两线程完成 打印
Log.d("+++", "Complete");
}
});
break;
case R.id.bt4:
//get 请求
RetrofitManager.getManager().getRetrofit()
.create(Api.class)
.foodList(1, 20, 1)
.observeOn(AndroidSchedulers.mainThread())
.subscribeOn(Schedulers.io())
.subscribe(new Observer<FoodBean>() {
@Override
public void onSubscribe(Disposable d) {
}
@Override
public void onNext(FoodBean foodBean) {
LogUtils.json(foodBean);
}
@Override
public void onError(Throwable e) {
}
@Override
public void onComplete() {
}
});
break;
case R.id.bt5:
RetrofitManager.getManager().getRetrofit()
.create(Api.class)
.login("zhaoxuhui4167", "123456")
.observeOn(AndroidSchedulers.mainThread())
.subscribeOn(Schedulers.io())
.subscribe(new Observer<UserBean>() {
@Override
public void onSubscribe(Disposable d) {
}
@Override
public void onNext(UserBean userBean) {
LogUtils.json(userBean);
Log.d("---", "onNext: ");
}
@Override
public void onError(Throwable e) {
}
@Override
public void onComplete() {
}
});
break;
case R.id.bt6:
JsonObject jsonObject = new JsonObject();
jsonObject.addProperty("username","zhaoxuhui");
jsonObject.addProperty("user_password","123456");
jsonObject.addProperty("userlevel","1");
jsonObject.addProperty("uservip","1");
RequestBody body = RequestBody.create(MediaType.parse("application/json"),jsonObject.toString());
//body体请求
RetrofitManager.getManager().getRetrofit()
.create(Api.class)
.register(body)
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(new Observer<UserBean>() {
@Override
public void onSubscribe(Disposable d) {
}
@Override
public void onNext(UserBean userBean) {
LogUtils.json(userBean);
Log.d("---", "onNext: ");
}
@Override
public void onError(Throwable e) {
}
@Override
public void onComplete() {
}
});
break;
}
}