第一步: 添加依赖
//RxJava
implementation 'io.reactivex:rxjava:1.1.3'
//RxAndroid
implementation 'io.reactivex:rxandroid:1.1.0'
//retrofit
implementation 'com.squareup.retrofit2:retrofit:2.0.0'
//retrofit依赖Gson
implementation 'com.squareup.retrofit2:converter-gson:2.0.0'
//OkHttp
implementation 'com.squareup.okhttp3:okhttp:3.8.0'
//retrofit依赖RxJava
implementation 'com.squareup.retrofit2:adapter-rxjava:2.0.0'
//okhttp
implementation 'com.squareup.okhttp3:logging-interceptor:3.6.0'
//日志
implementation 'com.orhanobut:logger:2.2.0'
第二步:
RetrofitServiceManager
package com.example.myapplication;
import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
import com.orhanobut.logger.Logger;
import java.io.IOException;
import java.util.concurrent.TimeUnit;
import okhttp3.Interceptor;
import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.Response;
import okhttp3.logging.HttpLoggingInterceptor;
import retrofit2.Retrofit;
import retrofit2.adapter.rxjava.RxJavaCallAdapterFactory;
import retrofit2.converter.gson.GsonConverterFactory;
/**
* Created by ShinnyYang on 2020/8/3.
*/
public class RetrofitServiceManager {
private static final int DEFAULT_CONNECT_TIME = 12;
private static final int DEFAULT_WRITE_TIME = 12;
private static final int DEFAULT_READ_TIME = 12;
private static OkHttpClient okHttpClient;
private static final String REQUEST_PATH = "http://admin.qianduoduo.cy6.co";
private static Retrofit retrofit;
private RetrofitServiceManager() {
retrofit = new Retrofit.Builder()
.client(initOKHttp())//设置使用okhttp网络请求
.baseUrl(REQUEST_PATH)//设置服务器路径
.addConverterFactory(GsonConverterFactory.create())//添加转化库,默认是Gson
.addCallAdapterFactory(RxJavaCallAdapterFactory.create())//添加回调库,采用RxJava
.build();
}
public static OkHttpClient initOKHttp() {
if (okHttpClient == null) {
HttpLoggingInterceptor loggingInterceptor = new HttpLoggingInterceptor(
new HttpLoggingInterceptor.Logger() {
@Override
public void log(String message) {
//防止&、=都被转义
Logger.e("okhttp==" + message);
}
}
);
loggingInterceptor.setLevel(HttpLoggingInterceptor.Level.BODY);
okHttpClient = new OkHttpClient.Builder()
/* .addInterceptor(new Interceptor() {
@Override
public Response intercept(Chain chain) throws IOException {
Request request = chain.request()
.newBuilder()
.addHeader("AuthToken", "")
.build();
return chain.proceed(request);
}
})*/
.connectTimeout(12, TimeUnit.SECONDS)
.readTimeout(12, TimeUnit.SECONDS)
.writeTimeout(12, TimeUnit.SECONDS)
.addInterceptor(loggingInterceptor)
.build();
}
return okHttpClient;
}
private static class SingletonHolder {
private static final RetrofitServiceManager INSTANCE = new RetrofitServiceManager();
}
/*
* 获取RetrofitServiceManager
**/
public static RetrofitServiceManager getInstance() {
return SingletonHolder.INSTANCE;
}
public T create(Class service) {
return retrofit.create(service);
}
}
第三步:
AllApi
package com.example.myapplication;
import com.example.myapplication.bean.HomeListBean;
import java.util.Map;
import retrofit2.http.GET;
import retrofit2.http.Query;
import retrofit2.http.QueryMap;
import rx.Observable;
/**
* Created by ShinnyYang on 2020/8/3.
*/
public interface AllApi {
@GET("/qddapiv2/index/list.php")
Observable getHomeList(@QueryMap Map map);
}
第四步:
HttpModel
package com.example.myapplication;
import com.example.myapplication.bean.HomeListBean;
import java.util.Map;
import rx.Observable;
import rx.Observer;
import rx.android.schedulers.AndroidSchedulers;
import rx.schedulers.Schedulers;
/**
* Created by ShinnyYang on 2020/8/3.
*/
public class HttpModel {
private static AllApi movieService = RetrofitServiceManager.getInstance().create(AllApi.class);
public static void getList(Map map,
Observer observer) {
setSubscribe(movieService.getHomeList(map), observer);
}
private static void setSubscribe(Observable observable, Observer observer) {
observable.subscribeOn(Schedulers.io())
.subscribeOn(Schedulers.newThread())//子线程访问网络
.observeOn(AndroidSchedulers.mainThread())//回调到主线程
.subscribe(observer);
}
}
第五步 :
private void getData() {
Map map = new HashMap<>();
map.put("page", "1");
map.put("auth", "");
map.put("time", "1596091163");
map.put("token", "ZcfveU5pHeYiqH6lfvE9qeIquMPVGnSloW7TYnryFCI=");
map.put("uid", "0730096");
map.put("action", "margin");
map.put("device_no", "ece430f2-cda1-4c5c-be1e-a0657395470e");
HttpModel.getList(map, new Observer() {
@Override
public void onCompleted() {
Toast.makeText(getApplicationContext(), "onCompleted", Toast.LENGTH_SHORT).show();
}
@Override
public void onError(Throwable e) {
Logger.e("onError==>" + e.getMessage());
}
@Override
public void onNext(HomeListBean homeListBean) {
Logger.e("onSuccess==>" + homeListBean.toString());
}
});
}
实体bean
package com.example.myapplication.bean; import java.util.List; public class HomeListBean { /** * status : 1 * time : 1595819291 * pagenum : 1 * data : [{"task_id":"254","type_id":"11","thumb":"http://admin.qianduoduo.cy6.co/api/img/5.png","title":"999999999999999","unit_price":"400.00","num":"12","is_jingpin":"0","margin_per":1,"finish":2,"type_name":"微信转发","extra":"75"}] * msg : 查询成功 */ private int status; private int time; private int pagenum; private String msg; private Listdata; public int getStatus() { return status; } public void setStatus(int status) { this.status = status; } public int getTime() { return time; } public void setTime(int time) { this.time = time; } public int getPagenum() { return pagenum; } public void setPagenum(int pagenum) { this.pagenum = pagenum; } public String getMsg() { return msg; } public void setMsg(String msg) { this.msg = msg; } public List getData() { return data; } public void setData(List data) { this.data = data; } @Override public String toString() { return "HomeListBean{" + "status=" + status + ", time=" + time + ", pagenum=" + pagenum + ", msg='" + msg + '\'' + ", data=" + data + '}'; } public static class DataBean { /** * task_id : 254 * type_id : 11 * thumb : http://admin.qianduoduo.cy6.co/api/img/5.png * title : 999999999999999 * unit_price : 400.00 * num : 12 * is_jingpin : 0 * margin_per : 1 * finish : 2 * type_name : 微信转发 * extra : 75 */ private String task_id; private String type_id; private String thumb; private String title; private String unit_price; private String num; private String is_jingpin; private int margin_per; private int finish; private String type_name; private String extra; @Override public String toString() { return "DataBean{" + "task_id='" + task_id + '\'' + ", type_id='" + type_id + '\'' + ", thumb='" + thumb + '\'' + ", title='" + title + '\'' + ", unit_price='" + unit_price + '\'' + ", num='" + num + '\'' + ", is_jingpin='" + is_jingpin + '\'' + ", margin_per=" + margin_per + ", finish=" + finish + ", type_name='" + type_name + '\'' + ", extra='" + extra + '\'' + '}'; } public String getTask_id() { return task_id; } public void setTask_id(String task_id) { this.task_id = task_id; } public String getType_id() { return type_id; } public void setType_id(String type_id) { this.type_id = type_id; } public String getThumb() { return thumb; } public void setThumb(String thumb) { this.thumb = thumb; } public String getTitle() { return title; } public void setTitle(String title) { this.title = title; } public String getUnit_price() { return unit_price; } public void setUnit_price(String unit_price) { this.unit_price = unit_price; } public String getNum() { return num; } public void setNum(String num) { this.num = num; } public String getIs_jingpin() { return is_jingpin; } public void setIs_jingpin(String is_jingpin) { this.is_jingpin = is_jingpin; } public int getMargin_per() { return margin_per; } public void setMargin_per(int margin_per) { this.margin_per = margin_per; } public int getFinish() { return finish; } public void setFinish(int finish) { this.finish = finish; } public String getType_name() { return type_name; } public void setType_name(String type_name) { this.type_name = type_name; } public String getExtra() { return extra; } public void setExtra(String extra) { this.extra = extra; } } }
完成!!!!!
常用的注解:
@GET GET请求方式
@POST POST请求方式
@Query GET请求参数
@Header用来添加Header请求头
@FormUrlEncoded post请求头标示 其他注解请求方式:
@PUT 表示这是一个PUT请求
@DELETE 表示这是一个DELETE请求
@HEAD 表示这是一个HEAD请求
@OPTIONS 表示这是一个OPTION请求
@PATCH 表示这是一个PAT请求