Android OkGo基本操作

或许不是很全面,也都是从网上粘的,自己记下以后使用方便点。如有不对的地方 欢迎指教。
首先添加依赖:

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

基本上就这些了,欢迎大家补充和指点

你可能感兴趣的:(Android OkGo基本操作)