或许不是很全面,也都是从网上粘的,自己记下以后使用方便点。如有不对的地方 欢迎指教。
首先添加依赖:
implementation 'com.lzy.net:okgo:3.0.4'
设置初始化和全局配置:
public class App extends Application {
@Override
public void onCreate() {
super.onCreate();
//okGo网络框架初始化和全局配置
OkHttpClient.Builder builder = new OkHttpClient.Builder();
//builder.cookieJar(new CookieJarImpl(new SPCookieStore(this))); //使用sp保持cookie,如果cookie不过期,则一直有效
builder.cookieJar(new CookieJarImpl(new DBCookieStore(this)));//使用数据库保持cookie,如果cookie不过期,则一直有效
//builder.cookieJar(new CookieJarImpl(new MemoryCookieStore())); //使用内存保持cookie,app退出后,cookie消失
//设置请求头
HttpHeaders headers = new HttpHeaders();
headers.put("commonHeaderKey1", "commonHeaderValue1"); //header不支持中文,不允许有特殊字符
headers.put("commonHeaderKey2", "commonHeaderValue2");
//设置请求参数
HttpParams params = new HttpParams();
params.put("commonParamsKey1", "commonParamsValue1"); //param支持中文,直接传,不要自己编码
params.put("commonParamsKey2", "这里支持中文参数");
OkGo.getInstance().init(this) //必须调用初始化
.setOkHttpClient(builder.build()) //建议设置OkHttpClient,不设置会使用默认的
.setCacheMode(CacheMode.NO_CACHE) //全局统一缓存模式,默认不使用缓存,可以不传
.setCacheTime(CacheEntity.CACHE_NEVER_EXPIRE) //全局统一缓存时间,默认永不过期,可以不传
.setRetryCount(3) //全局统一超时重连次数,默认为三次,那么最差的情况会请求4次(一次原始请求,三次重连请求),不需要可以设置为0
.addCommonHeaders(headers) //全局公共头
.addCommonParams(params);
}
}
Post请求 使用的是json形式传参
Map map = new HashMap<>();
map.put("pageNum", 1);
map.put("pageSize", 10);
Gson gson = new Gson();
String json = gson.toJson(map);
OkGo.post(url) //输入请求地址
.tag(this)//销毁请求时候会用到
.upJson(json)//上传参数 如果没什么需求直接用 .params("key", "paramValue1")
.execute(new StringCallback() {
@Override
public void onSuccess(Response response) {
String body = response.body();
Gson bodyJson = new Gson();
MyBean myBean = bodyJson.fromJson(body, MyBean.class);
Log.d("MainActivity", "============" + myBean.getMsg());
Log.d("MainActivity", "============" + myBean.getData().getList().size());
}
@Override
public void onError(Response response) {
super.onError(response);
}
});
Get请求
OkGo.get(url)
.tag(this)//
.headers("header1", "headerValue1")//
.params("param1", "paramValue1")//
.execute(new StringCallback() {
@Override
public void onSuccess(Response response) {
//注意这里已经是在主线程了
String data = response.body();//这个就是返回来的结果
}
@Override
public void onError(Response response) {
super.onError(response);
}
});
文件上传
OkGo.post(url)
.tag(this)//
.headers("header1", "headerValue1")//
.headers("header2", "headerValue2")//
.params("param1", "paramValue1")//
.params("param2", "paramValue2")//
// .params("file1",new File("文件路径")) //这种方式为一个key,对应一个文件
// .params("file2",new File("文件路径"))
// .params("file3",new File("文件路径"))
.addFileParams("filename", files) // 这种方式为同一个key,上传多个文件
.execute(new JsonCallback() {
@Override
public void onStart(Request request) {
btnFormUpload.setText("正在上传中...");
}
@Override
public void onSuccess(Response response) {
btnFormUpload.setText("上传完成"+response.body());
}
@Override
public void onError(Response response) {
btnFormUpload.setText("上传出错");
}
@Override
public void uploadProgress(Progress progress) {
System.out.println("uploadProgress: " + progress);
}
});
文件下载
OkGo.get(url)
.tag(this)//
.headers("header1", "headerValue1")//
.params("param1", "paramValue1")//
.execute(new FileCallback("OkGo.apk") {
@Override
public void onStart(Request request) {
btnFileDownload.setText("正在下载中");
}
@Override
public void onSuccess(Response response) {
btnFileDownload.setText("下载完成"+response.body());
}
@Override
public void onError(Response response) {
btnFileDownload.setText("下载出错");
}
@Override
public void downloadProgress(Progress progress) {
System.out.println(progress);
}
});
请求销毁
@Override
protected void onDestroy() {
super.onDestroy();
//取消指定tag的请求
OkGo.getInstance().cancelTag(this);
//取消全部请求
OkGo.getInstance().cancelAll();
//取消OkHttpClient的全部请求
OkGo.cancelAll(new OkHttpClient());
OkGo.cancelTag(new OkHttpClient(), "且指定tag");
}
基本上就这些了,欢迎大家补充和指点