美文网首页Android 技术收集
Android OkGo基本操作

Android OkGo基本操作

作者: 当个海贼多好 | 来源:发表于2019-03-04 11:12 被阅读67次

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

 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<String, Integer> map = new HashMap<>();
        map.put("pageNum", 1);
        map.put("pageSize", 10);
        Gson gson = new Gson();
        String json = gson.toJson(map);
        OkGo.<String>post(url) //输入请求地址
                .tag(this)//销毁请求时候会用到
                .upJson(json)//上传参数  如果没什么需求直接用   .params("key", "paramValue1")
                .execute(new StringCallback() {
                    @Override
                    public void onSuccess(Response<String> 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<String> response) {
                        super.onError(response);
                    }
                });

Get请求

OkGo.<String>get(url)
        .tag(this)//
        .headers("header1", "headerValue1")//
        .params("param1", "paramValue1")//
        .execute(new StringCallback() {
            @Override
            public void onSuccess(Response<String> response) {
                //注意这里已经是在主线程了
                String data = response.body();//这个就是返回来的结果
            }
 
            @Override
            public void onError(Response<String> response) {
                super.onError(response);
            }
        });

文件上传

   OkGo.<String>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<String>() {
                    @Override
                    public void onStart(Request<String, ? extends Request> request) {
                        btnFormUpload.setText("正在上传中...");
                    }
 
                    @Override
                    public void onSuccess(Response<String> response) {
                        btnFormUpload.setText("上传完成"+response.body());
                    }
 
                    @Override
                    public void onError(Response<String> response) {
                        btnFormUpload.setText("上传出错");
                    }
 
                    @Override
                    public void uploadProgress(Progress progress) {
                        System.out.println("uploadProgress: " + progress);
                    }
                });

文件下载

OkGo.<File>get(url)
        .tag(this)//
        .headers("header1", "headerValue1")//
        .params("param1", "paramValue1")//
        .execute(new FileCallback("OkGo.apk") {
 
            @Override
            public void onStart(Request<File, ? extends Request> request) {
                btnFileDownload.setText("正在下载中");
            }
 
            @Override
            public void onSuccess(Response<File> response) {
                btnFileDownload.setText("下载完成"+response.body());
            }
 
            @Override
            public void onError(Response<File> 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基本操作

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

  • Android-分享一个常见的网络请求库(OkGo)

    在常见的Android项目维护当中,我们可能会遇到一个网络请求库OkGo。这篇文章分享一下OkGo的相关知识,希望...

  • android &springboot body传递参数

    springboot的后端代码 postman的调试用例 postman截图调用结果 android 代码--okgo

  • android 读写文件

    title: android 读写文件 基本知识参照博客 Android - 文件读写操作 总结

  • android sqlite 基本操作

    sqlite是android内置的关系数据库。 网上的基础教程比较多,此处主要讲如何在项目中搭建数据库代码基础架构...

  • Android-SQLite和SQLiteOpenHelper

    参考: Android 操作SQLite基本用法一、 SQLite介绍SQLite是Android内置的一个很小的...

  • Android Studio

    视频教程 Android Studio 全方位指南之初识 Android Studio 全方位指南之基本操作指南 ...

  • Android使用OKGO的坑

    首次项目使用okgo网络请求框架,碰到一个非常坑的bug,这里做个记录。 每次A表单页面提交数据请求,成功之后然后...

  • 线程

    一、Android线程的基本介绍 在操作系统中,线程是操作系统调度的最小单元

  • Android函数响应式编程最新RxJava-操作符入门(1)

    Android函数响应式编程最新RxJava-基本用法 Rxjava操作符包括创建操作符、变换操作符、过滤操作符、...

网友评论

    本文标题:Android OkGo基本操作

    本文链接:https://www.haomeiwen.com/subject/wjebuqtx.html