Andriod studio 学习 之 OkGo框架
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框架相关推荐
- Andriod studio 学习 之打包
进行打包时的一些单词解释 Key store path : 签名文件路径 Password : 签名密码 Confirm : 确认密码 Alias : 别名 Validity ( years ) : ...
- Andriod studio学习 之 对话框
学习第一天 Dialog对话框 一 常用的对话框 1.普通对话框 2.单选对话框 3.多选对话框 4.自定义对话框 5.水平进度对话框 6.圆形进度条对话框 7.日期选择对话框 8.时间对话框 二 自 ...
- Andriod studio 学习 之 高德地图的导航功能
实现效果 具体可以参考搜索高德地图API的一些介绍,添加清单文件以及依赖 代码 布局xml <?xml version="1.0" encoding="utf-8& ...
- Android studio 学习 之打包
Andriod studio 学习 之打包 Key store path : 签名文件路径 Password : 签名密码 Confirm : 确认密码 Alias : 别名 Validity ( y ...
- ROBOT STUDIO 学习笔记
ROBOT STUDIO 学习笔记 机器人行业四大家族:库卡.ABB.安川.发那科 1.新建工作站 1.模型的插入 机器人 控制柜 末端执行器 工作台的插入 显示机器人的工作区域 将工作台移动到机器人 ...
- RT-Thread Studio学习(十一)IIC
RT-Thread Studio学习(十一)IIC 一.简介 二.新建RT-Thread项目并使用外部时钟 三.设置AT24Cxx的驱动框架 四.驱动代码移植 五.测试 六.总结 一.简介 本文将基于 ...
- Andriod Studio 开发环境搭建
Andriod Studio从零开始的安卓开发环境搭建 官网下载android studio 阅读.勾选同意协议并点击下载 下载完成后打开 安装完成,打开后 创建项目 创建一个空Activity的项目 ...
- 腾讯Tinker 热修复 Andriod studio 3.0 配置和集成(二)多渠道打包和补丁发布
腾讯Tinker 热修复 Andriod studio 3.0 多渠道打包和发布补丁方式推荐 本文说明 在之前我已经分享了Tinker 热修复的 Andriod studio3.0 初次配置和集成,时 ...
- Google和微软分别提出分布式深度学习训练新框架:GPipe PipeDream
[进群了解最新免费公开课.技术沙龙信息] 作者 | Jesus Rodriguez 译者 | 陆离 编辑 | Jane 出品 | AI科技大本营(ID:rgznai100) [导读]微软和谷歌一直在致 ...
最新文章
- 如何找出应用程序未使用绑定变量
- c++ 把数字和中文字符分开_C语言中的字符常量与变量
- 物联网时代,对产品经理有哪些新的要求?
- ITK:KMeans聚类
- TCP三次握手,握的是啥?
- php绘制饼图,php怎么绘制饼图?
- mysql 数据库event_mysql数据库事件调度(Event)
- oracle客户端和ssh区别,oracle 使用SSH 转发功能
- PAT A1045 动态规划
- Tomcat9.0部署iot.war(环境mysql8.0,centos7.2)
- iZotope Trash 2 for Mac(失真效果音频插件)
- 9.docker commit
- 项目无法加载nacos配置中心的配置文件问题
- 一次阿里巴巴的电话面试
- 解决:linux启动Redis报Failed to search for file:Cannot prepare internal mirrorlist: No URLs in mirrorlist
- Python基础知识笔记
- 在通达信里制作自己的指数
- 51单片机系列——基于单片机的蓝牙LED摇摇棒设计
- 建筑八大员培训湖北质量员培训工程质量监督管理的措施和原则
- js多线程的实现:worker
热门文章
- 撸一个自动换壁纸桌面应用
- vulhub打靶第一周
- 如何用U盘拷贝4G以上的文件?
- UVa816 例题 6-14 Abbott的复仇 (Abbott's Revenge,ACM/ICPC World Finals 2000)
- matlab求最小割,matlab實現圖割算法中的最大流最小割Max-flow/min-cut問題(一)
- 为什么手机里的小爱音响app里搜不到家里的小爱音箱_小米随身版小爱蓝牙音箱【开箱体验】,49的小爱音箱,值了...
- uni-app入门及uni-app项目目录介绍
- python+playwright 学习-6.截图使用
- 小程序 苹果 ios解决下拉出现黑色背景
- Ruby入门:helloworld!