OkGo依赖: implementation ‘com.lzy.net:okgo:3.0.4’
OkGo主要功能
- 基本的get、post、put、delete、head、options、trace、patch八种请求
- 支持upString,upJson,upBytes,upFile等up类方法上传特定数据
- 支持一个key上传一个文件,也可以一个key上传多个文件,也可以多文件和多参数一起上传
- 大文件下载和下载进度回调
- 大文件上传和上传进度回调
- 支持cookie的自动管理,并可自定义cookie管理策略
- 支持缓存模式,不仅支持http缓存协议,也支持自定义缓存策略
- 支持重定向
- 支持自定义超时自动重连次数
- 支持链式调用
- 支持https访问,支持双向认证
- 支持根据tag取消请求,也可全部取消
- 支持自定义Callback,自动解析网络数据
OkGo要注意必须写泛型!!!!
OkGo主要方法
- .post(url):这个表示当前请求是post请求,当然一共支持GET,HEAD,OPTIONS,POST,PUT,DELETE, PATCH, TRACE这8种请求方式,你只需要改改这个方法名就行了,很方便。
- .params():添加参数的时候,最后一个isReplace为可选参数,默认为true,即代表相同key的时候,后添加的会覆盖先前添加的。
- .tag(this):请求的tag,用于标识当前的请求,方便后续取消对应的请求,如果你不需要取消请求,也可以不用设置。
- .isMultipart():该方法表示是否强制使用multipart/form-data表单上传,因为该框架在有文件的时候,无论你是否设置这个参数,默认都是multipart/form-data格式上传,但是如果参数中不包含文件,默认使用application/x-www-form-urlencoded格式上传,如果你的服务器要求无论是否有文件,都要使用表单上传,那么可以用这个参数设置为true。
- .isSpliceUrl():该方法表示是否强制将params的参数拼接到url后面,默认false不拼接。一般来说,post、put等有请求体的方法应该把参数都放在请求体中,不应该放在url上,但是有的服务端可能不太规范,url和请求体都需要传递参数,那么这时候就使用该参数,他会将你所有使用.params()方法传递的参数,自动拼接在url后面。
- .retryCount():该方法是配置超时重连次数,也可以在全局初始化的时候设置,默认使用全局的配置,即为3次,你也可以在这里为你的这个请求特殊配置一个,并不会影响全局其他请求的超时重连次数。
- .cacheKey() .cacheTime() .cacheMode():这三个是缓存相关的配置
- .headers():该方法是传递服务端需要的请求头
- .params():该方法传递键值对参数
- .addUrlParams() .addFileParams() .addFileWrapperParams():这里是支持一个key传递多个文本参数,也支持一个key传递多个文件参数
public class MainActivity extends AppCompatActivity {
ProgressBar bar;
ImageView imageView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
bar = findViewById(R.id.bar);
imageView = findViewById(R.id.imageView);
}
public void click(View view) {
switch (view.getId()){
case R.id.doGet:
doGet();
break;
case R.id.doPost:
doPost();
break;
case R.id.post:
post();
break;
case R.id.getpic:
getPic();
break;
case R.id.getfile:
getfile();
break;
}
}
//get获取文件
private void getfile() {
OkGo.<File>get("http://clips.vorwaerts-gmbh.de/big_buck_bunny.mp4")//设置网址
.execute(new FileCallback() {
@Override
public void onStart(Request<File, ? extends Request> request) {
super.onStart(request);
}
@Override
public void onError(Response<File> response) {
super.onError(response);
}
@Override
public void onFinish() {
super.onFinish();
}
@Override
public void downloadProgress(Progress progress) {
super.downloadProgress(progress);
bar.setProgress((int) (progress.fraction*100));
}
@Override
public void onSuccess(Response<File> response) {
File body = response.body();
}
});
}
//get获取图片
private void getPic() {
OkGo.<Bitmap>get("http://169.254.113.244/hfs/zizi.jpg")
.execute(new BitmapCallback() {
@Override
public void onSuccess(Response<Bitmap> response) {
Bitmap bitmap = response.body();
Toast.makeText(MainActivity.this, ""+bitmap.getByteCount(), Toast.LENGTH_SHORT).show();
imageView.setImageBitmap(bitmap);
}
});
}
//post上传文件
private void post() {
OkGo.<String>post("http://169.254.113.244/hfs/")
.isMultipart(true)
.params("file",new File("/sdcard/Download/天下.mp3"),"jojo.mp3")
.execute(new StringCallback() {
@Override
public void onSuccess(Response<String> response) {
Toast.makeText(MainActivity.this, ""+response.body(), Toast.LENGTH_SHORT).show();
}
});
}
//post请求数据
private void doPost() {
HashMap<String,String> map = new HashMap<>();
map.put("phone","17610356138");
map.put("passwd","123");
OkGo.<String>post("https://www.apiopen.top/createUser?key=00d91e8e0cca2b76f515926a36db68f5&")
.params(map)
.execute(new StringCallback() {
@Override
public void onSuccess(Response<String> response) {
Toast.makeText(MainActivity.this, ""+response.body(), Toast.LENGTH_SHORT).show();
}
});
}
//get请求json串
private void doGet() {
OkGo.<String>get("https://gitee.com/little_bird_oh_777/test_data_collection/raw/master/test42018061001.json")
.tag(this)
.cacheKey("cacheKey")
.execute(new StringCallback() {
@Override
public void onSuccess(Response<String> response) {
Toast.makeText(MainActivity.this, ""+response.body(), Toast.LENGTH_SHORT).show();
}
});
}
}