OkGo请求数据

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();
                    }
                });
    }
}

参考文章地址:https://github.com/jeasonlzy/okhttp-OkGo/wiki/OkGo

你可能感兴趣的:(OkGo请求数据)