OkGo框架

用来处理网络请求的框架 功能:上传,下载

OkGo主要功能

基本的get、post、put、delete、head、options、trace、patch八种请求
支持upString,upJson,upBytes,upFile等up类方法上传特定数据
支持一个key上传一个文件,也可以一个key上传多个文件,也可以多文件和多参数一起上传 大文件下载和下载进度回调 大文件上传和上传进度回调
支持cookie的自动管理,并可自定义cookie管理策略 支持缓存模式,不仅支持http缓存协议,也支持自定义缓存策略 支持重定向
支持自定义超时自动重连次数 支持链式调用 支持https访问,支持双向认证 支持根据tag取消请求,也可全部取消
支持自定义Callback,自动解析网络数据

首先添加依赖:

implementation ‘com.lzy.net:okgo:3.0.4’

案例效果展示

上传的文件展示

下载的文件展示

解析的字符串log输出展示

关于代码的一些问题

实现的功能:get方式下载文件,封装工具类下载json串并解析字符串,post上传MP4;
ps:其中加入了progress测试,还有glide的功能
思路:
1.首先需要封装一个工具类
(1)这个工具类需要定义一个结果接口传值
(2)这个工具类需要实现下载json串和解析的功能
(3)这个工具类非常灵活,调用时可以用任意json串
2.在xml中需要定义按钮实现效果
3.activity中需要实现具体代码

代码

xml布局中的代码

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:app="http://schemas.android.com/apk/res-auto"xmlns:tools="http://schemas.android.com/tools"android:layout_width="match_parent"android:layout_height="match_parent"android:orientation="vertical"tools:context=".MainActivity"><Buttonandroid:id="@+id/image"android:layout_width="match_parent"android:layout_height="wrap_content"android:text="下载文件"/><Buttonandroid:id="@+id/json"android:layout_width="match_parent"android:layout_height="wrap_content"android:text="解析json"/><Buttonandroid:id="@+id/mp4"android:layout_width="match_parent"android:layout_height="wrap_content"android:text="上传mp4"/><ProgressBarandroid:id="@+id/progress"android:layout_width="match_parent"android:layout_height="wrap_content"style="@style/Widget.AppCompat.ProgressBar.Horizontal"/><Buttonandroid:id="@+id/imagecorner"android:layout_width="match_parent"android:layout_height="wrap_content"android:text="Glide圆形圆角"/><ImageViewandroid:id="@+id/imageview"android:layout_width="wrap_content"android:layout_height="wrap_content"android:src="@mipmap/bird"/></LinearLayout>

定义的接口

package com.example.day004.Utils;public interface Getinterface<T> {public void success(T o);
}

实现解析的工具类

package com.example.day004.Utils;import com.google.gson.Gson;
import com.lzy.okgo.OkGo;
import com.lzy.okgo.callback.StringCallback;
import com.lzy.okgo.model.Response;public class OkgoUtils {public<T> void fromjson(String url, final Class c, final Getinterface getinterface){OkGo.<String>get(url).execute(new StringCallback() {@Overridepublic void onSuccess(Response<String> response) {String body = response.body();Gson gson = new Gson();Object o = gson.fromJson(body, c);getinterface.success((T)o);}});}
}

activity中的代码

package com.example.day004;import android.os.Environment;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.ProgressBar;
import android.widget.Toast;import com.example.day004.Utils.Bean;
import com.example.day004.Utils.Getinterface;
import com.example.day004.Utils.Imageutils;
import com.example.day004.Utils.OkgoUtils;
import com.lzy.okgo.OkGo;
import com.lzy.okgo.callback.FileCallback;
import com.lzy.okgo.callback.StringCallback;
import com.lzy.okgo.model.Progress;
import com.lzy.okgo.model.Response;import java.io.File;public class MainActivity extends AppCompatActivity {private Button image;private Button json;private Button mp4;private ProgressBar progressbar;private Button imagecorner;private ImageView imageview;private String url="http://www.qubaobei.com/ios/cf/dish_list.php?stage_id=1&limit=10&page=1";@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);image = (Button) findViewById(R.id.image);json = (Button) findViewById(R.id.json);mp4 = (Button) findViewById(R.id.mp4);progressbar = (ProgressBar) findViewById(R.id.progress);imagecorner = (Button) findViewById(R.id.imagecorner);imageview = (ImageView) findViewById(R.id.imageview);//下载文件image.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {new Thread(){@Overridepublic void run() {super.run();String url="http://uvideo.spriteapp.cn/video/2019/0512/56488d0a-7465-11e9-b91b-1866daeb0df1_wpd.mp4";OkGo.<File>get(url).execute(new FileCallback(Environment.getExternalStorageDirectory().getPath(),"abc.MP4") {@Overridepublic void onSuccess(Response<File> response) {File body = response.body();}//上传的进度@Overridepublic void downloadProgress(Progress progress) {super.downloadProgress(progress);//如何拿到当前的进度progressbar.setProgress((int) (progress.fraction*100));}});}}.start();}});//解析字符串json.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {new Thread(){@Overridepublic void run() {super.run();OkGo.<String>get(url).execute(new StringCallback() {@Overridepublic void onSuccess(Response<String> response) {OkgoUtils okgoUtils = new OkgoUtils();okgoUtils.fromjson(url, Bean.class, new Getinterface<Bean>() {@Overridepublic void success(Bean o) {String json = o.toString();Toast.makeText(MainActivity.this, json, Toast.LENGTH_SHORT).show();}});}});}}.start();}});//上传mp3mp4.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {new Thread(){@Overridepublic void run() {super.run();OkGo.<String>post("http://169.254.152.180/test/").isMultipart(true).params("file",new File("/mnt/sdcard/hhh.mp3"),"aaa.MP3").execute(new StringCallback() {@Overridepublic void onSuccess(Response<String> response) {Log.d( "结果: ",response.body());}@Overridepublic void uploadProgress(Progress progress) {super.uploadProgress(progress);
//                        progress.fraction*100;}});}}.start();}});imagecorner.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {Imageutils imageutils = new Imageutils();imageutils.loadimage(MainActivity.this,"http://img.redocn.com/sheying/20140731/qinghaihuyuanjing_2820969.jpg",imageview);}});}
}

测试用的bean类

package com.example.day004.Utils;import java.util.List;public class Bean {/*** ret : 1* data : [{"id":"8289","title":"油焖大虾","pic":"http://www.qubaobei.com/ios/cf/uploadfile/132/9/8289.jpg","collect_num":"1668","food_str":"大虾 葱 生姜 植物油 料酒","num":1668},{"id":"2127","title":"四川回锅肉","pic":"http://www.qubaobei.com/ios/cf/uploadfile/132/3/2127.jpg","collect_num":"1590","food_str":"猪肉 青蒜 青椒 红椒 姜片","num":1590},{"id":"30630","title":"超简单芒果布丁","pic":"http://www.qubaobei.com/ios/cf/uploadfile/132/31/30630.jpg","collect_num":"1540","food_str":"QQ糖 牛奶 芒果","num":1540},{"id":"9073","title":"家常红烧鱼","pic":"http://www.qubaobei.com/ios/cf/uploadfile/132/10/9073.jpg","collect_num":"1425","food_str":"鲜鱼 姜 葱 蒜 花椒","num":1425},{"id":"10097","title":"家常煎豆腐","pic":"http://www.qubaobei.com/ios/cf/uploadfile/132/11/10097.jpg","collect_num":"1417","food_str":"豆腐 新鲜红椒 青椒 葱花 油","num":1417},{"id":"10509","title":"水煮肉片","pic":"http://www.qubaobei.com/ios/cf/uploadfile/132/11/10509.jpg","collect_num":"1340","food_str":"瘦猪肉 生菜 豆瓣酱 干辣椒 花椒","num":1340},{"id":"46968","title":"红糖苹果银耳汤","pic":"http://www.qubaobei.com/ios/cf/uploadfile/132/47/46968.jpg","collect_num":"1252","food_str":"银耳 苹果 红糖","num":1252},{"id":"10191","title":"麻婆豆腐","pic":"http://www.qubaobei.com/ios/cf/uploadfile/132/11/10191.jpg","collect_num":"1220","food_str":"豆腐 肉末 生抽 白糖 芝麻油","num":1220},{"id":"2372","title":"皮蛋瘦肉粥","pic":"http://www.qubaobei.com/ios/cf/uploadfile/132/3/2372.jpg","collect_num":"1151","food_str":"大米 皮蛋 猪肉 油条 香葱","num":1151},{"id":"2166","title":"蚂蚁上树","pic":"http://www.qubaobei.com/ios/cf/uploadfile/132/3/2166.jpg","collect_num":"1144","food_str":"红薯粉 肉 姜 蒜 花椒","num":1144}]*/private int ret;private List<DataBean> data;public int getRet() {return ret;}public void setRet(int ret) {this.ret = ret;}public List<DataBean> getData() {return data;}public void setData(List<DataBean> data) {this.data = data;}public static class DataBean {/*** id : 8289* title : 油焖大虾* pic : http://www.qubaobei.com/ios/cf/uploadfile/132/9/8289.jpg* collect_num : 1668* food_str : 大虾 葱 生姜 植物油 料酒* num : 1668*/private String id;private String title;private String pic;private String collect_num;private String food_str;private int num;public String getId() {return id;}public void setId(String id) {this.id = id;}public String getTitle() {return title;}public void setTitle(String title) {this.title = title;}public String getPic() {return pic;}public void setPic(String pic) {this.pic = pic;}public String getCollect_num() {return collect_num;}public void setCollect_num(String collect_num) {this.collect_num = collect_num;}public String getFood_str() {return food_str;}public void setFood_str(String food_str) {this.food_str = food_str;}public int getNum() {return num;}public void setNum(int num) {this.num = num;}}
}

额外的图片工具类

package com.example.day004.Utils;import android.content.Context;
import android.widget.ImageView;import com.bumptech.glide.Glide;
import com.bumptech.glide.load.resource.bitmap.RoundedCorners;
import com.bumptech.glide.request.RequestOptions;
import com.example.day004.R;/*** Glide是图片的下载框架*/
public class Imageutils {public void loadimage(Context context, String url, ImageView imageView){RequestOptions options = new RequestOptions();options.error(R.mipmap.ic_launcher);//错误的时候显示的一张图options.placeholder(R.mipmap.ic_launcher);//占位图options.circleCrop();//圆形图
//        RoundedCorners roundedCorners = new RoundedCorners(20);
//        options.transform(roundedCorners);//圆角Glide.with(context).load(url).apply(options).into(imageView);}
}

Andriod studio 学习 之 OkGo框架相关推荐

  1. Andriod studio 学习 之打包

    进行打包时的一些单词解释 Key store path : 签名文件路径 Password : 签名密码 Confirm : 确认密码 Alias : 别名 Validity ( years ) : ...

  2. Andriod studio学习 之 对话框

    学习第一天 Dialog对话框 一 常用的对话框 1.普通对话框 2.单选对话框 3.多选对话框 4.自定义对话框 5.水平进度对话框 6.圆形进度条对话框 7.日期选择对话框 8.时间对话框 二 自 ...

  3. Andriod studio 学习 之 高德地图的导航功能

    实现效果 具体可以参考搜索高德地图API的一些介绍,添加清单文件以及依赖 代码 布局xml <?xml version="1.0" encoding="utf-8& ...

  4. Android studio 学习 之打包

    Andriod studio 学习 之打包 Key store path : 签名文件路径 Password : 签名密码 Confirm : 确认密码 Alias : 别名 Validity ( y ...

  5. ROBOT STUDIO 学习笔记

    ROBOT STUDIO 学习笔记 机器人行业四大家族:库卡.ABB.安川.发那科 1.新建工作站 1.模型的插入 机器人 控制柜 末端执行器 工作台的插入 显示机器人的工作区域 将工作台移动到机器人 ...

  6. RT-Thread Studio学习(十一)IIC

    RT-Thread Studio学习(十一)IIC 一.简介 二.新建RT-Thread项目并使用外部时钟 三.设置AT24Cxx的驱动框架 四.驱动代码移植 五.测试 六.总结 一.简介 本文将基于 ...

  7. Andriod Studio 开发环境搭建

    Andriod Studio从零开始的安卓开发环境搭建 官网下载android studio 阅读.勾选同意协议并点击下载 下载完成后打开 安装完成,打开后 创建项目 创建一个空Activity的项目 ...

  8. 腾讯Tinker 热修复 Andriod studio 3.0 配置和集成(二)多渠道打包和补丁发布

    腾讯Tinker 热修复 Andriod studio 3.0 多渠道打包和发布补丁方式推荐 本文说明 在之前我已经分享了Tinker 热修复的 Andriod studio3.0 初次配置和集成,时 ...

  9. Google和微软分别提出分布式深度学习训练新框架:GPipe PipeDream

    [进群了解最新免费公开课.技术沙龙信息] 作者 | Jesus Rodriguez 译者 | 陆离 编辑 | Jane 出品 | AI科技大本营(ID:rgznai100) [导读]微软和谷歌一直在致 ...

最新文章

  1. 如何找出应用程序未使用绑定变量
  2. c++ 把数字和中文字符分开_C语言中的字符常量与变量
  3. 物联网时代,对产品经理有哪些新的要求?
  4. ITK:KMeans聚类
  5. TCP三次握手,握的是啥?
  6. php绘制饼图,php怎么绘制饼图?
  7. mysql 数据库event_mysql数据库事件调度(Event)
  8. oracle客户端和ssh区别,oracle 使用SSH 转发功能
  9. PAT A1045 动态规划
  10. Tomcat9.0部署iot.war(环境mysql8.0,centos7.2)
  11. iZotope Trash 2 for Mac(失真效果音频插件)
  12. 9.docker commit
  13. 项目无法加载nacos配置中心的配置文件问题
  14. 一次阿里巴巴的电话面试
  15. 解决:linux启动Redis报Failed to search for file:Cannot prepare internal mirrorlist: No URLs in mirrorlist
  16. Python基础知识笔记
  17. 在通达信里制作自己的指数
  18. 51单片机系列——基于单片机的蓝牙LED摇摇棒设计
  19. 建筑八大员培训湖北质量员培训工程质量监督管理的措施和原则
  20. js多线程的实现:worker

热门文章

  1. 撸一个自动换壁纸桌面应用
  2. vulhub打靶第一周
  3. 如何用U盘拷贝4G以上的文件?
  4. UVa816 例题 6-14 Abbott的复仇 (Abbott's Revenge,ACM/ICPC World Finals 2000)
  5. matlab求最小割,matlab實現圖割算法中的最大流最小割Max-flow/min-cut問題(一)
  6. 为什么手机里的小爱音响app里搜不到家里的小爱音箱_小米随身版小爱蓝牙音箱【开箱体验】,49的小爱音箱,值了...
  7. uni-app入门及uni-app项目目录介绍
  8. python+playwright 学习-6.截图使用
  9. 小程序 苹果 ios解决下拉出现黑色背景
  10. Ruby入门:helloworld!