zoukankan      html  css  js  c++  java
  • Android 开源框架 ( 二 ) 基于OkHttp进一步封装的okhttp-utils介绍

      okhttp-utils是张鸿洋是基于OkHttp封装的框架库。实际工作中,使用的不多,对于小型项目的网络请求和文件传输可以考虑直接使用。否则还是基于主流的OkHttp+Retrift+RxJava框架。

      对于OkHttp使用,可以自己根据自己项目需要,做一些封装。如果应付手头临时项目,可以借鉴GitHub上一些开源OkHttp封装库.只要去GitHub上搜索下OkHttp 会出来很多封装的框架。

      分析okhttp-utils使用,只是用于自己学习了解。

    一.将okhttp-utils当做module引入项目中

        

    二.okhttp-utils引入到项目中文件列表目录:

            

    三.okhttp-utils 基本使用

      1. //get 请求数据

    OkHttpUtils
            .get()
            .url(url)
            .id(100)
            .build()
            .execute(new MyStringCallback());

      2.//post 请求数据

    OkHttpUtils
            .postString()
            .url(url)
            .mediaType(MediaType.parse("application/json; charset=utf-8"))
            .content(new Gson().toJson(new User("zhy", "123")))
            .build()
            .execute(new MyStringCallback());        

      3.//上传文件

    OkHttpUtils
            .postFile()
            .url(url)
            .file(file)
            .build()
            .execute(new MyStringCallback());

      4.//加载图片

    OkHttpUtils
            .get()
            .url(url)
            .tag(this)
            .build()
            .connTimeOut(20000)
            .readTimeOut(20000)
            .writeTimeOut(20000)
            .execute(new BitmapCallback()
            {
                @Override
                public void onError(Call call, Exception e, int id)
                {
                    mTv.setText("onError:" + e.getMessage());
                }
    
                @Override
                public void onResponse(Bitmap bitmap, int id)
                {
                    Log.e("TAG", "onResponse:complete");
                    mImageView.setImageBitmap(bitmap);
                }
            });    

      5.//上传单个文件

    OkHttpUtils.post()//
            .addFile("mFile", "messenger_01.png", file)
            .url(url)
            .params(params)//带表单数据
            .headers(headers)
            .build()
            .execute(new MyStringCallback());    

      6.//上传多个文件

    OkHttpUtils.post()
            .addFile("mFile", "messenger_01.png", file)
            .addFile("mFile", "test1.txt", file2)
            .url(url)
            .params(params)//带表单数据
            .build()
            .execute(new MyStringCallback());    

      7.//下载文件

    OkHttpUtils
            .get()
            .url(url)
            .build()
            .execute(new FileCallBack(Environment.getExternalStorageDirectory().getAbsolutePath(), "gson-2.2.1.jar")
            {
    
                @Override
                public void onBefore(Request request, int id)
                {
                }
    
                @Override
                public void inProgress(float progress, long total, int id)
                {
                    //进度条显示
                    mProgressBar.setProgress((int) (100 * progress));
                    Log.e(TAG, "inProgress :" + (int) (100 * progress));
                }
    
                @Override
                public void onError(Call call, Exception e, int id)
                {
                    Log.e(TAG, "onError :" + e.getMessage());
                }
    
                @Override
                public void onResponse(File file, int id)
                {
                    Log.e(TAG, "onResponse :" + file.getAbsolutePath());
                }
            });    

      定义的公共回调方法:

    public class MyStringCallback extends StringCallback
        {
            @Override
            public void onBefore(Request request, int id)
            {
            }
    
            @Override
            public void onAfter(int id)
            {
            }
    
            @Override
            public void onError(Call call, Exception e, int id)
            {
                e.printStackTrace();
            }
    
            @Override
            public void onResponse(String response, int id)
            {
                Log.e(TAG, "onResponse:complete");
                mTv.setText("onResponse:" + response);
    
                switch (id)
                {
                    case 100:
                        Toast.makeText(MainActivity.this, "http", Toast.LENGTH_SHORT).show();
                        break;
                    case 101:
                        Toast.makeText(MainActivity.this, "https", Toast.LENGTH_SHORT).show();
                        break;
                }
            }
    
            @Override
            public void inProgress(float progress, long total, int id)
            {
                Log.e(TAG, "inProgress:" + progress);
                mProgressBar.setProgress((int) (100 * progress));
            }
        }        
  • 相关阅读:
    AcWing 1027. 方格取数 dp
    AcWing 1014. 登山 dp
    acwing 482. 合唱队形 dp
    LeetCode 1463. 摘樱桃II dp
    LeetCode 100. 相同的树 树的遍历
    LeetCode 336. 回文对 哈希
    LeetCode 815. 公交路线 最短路 哈希
    算法问题实战策略 DARPA大挑战 二分
    算法问题实战策略 LUNCHBOX 贪心
    AcWing 1100. 抓住那头牛 BFS
  • 原文地址:https://www.cnblogs.com/bugzone/p/okhttp-utils.html
Copyright © 2011-2022 走看看