Android 普通okhttp、okhttp utils执行 post get请求,文件上传下载、请求图片
public class OKHttpActivity extends Activity implements View.OnClickListener {
public static final MediaType JSON
= MediaType.parse("application/json; charset=utf-8");
/**
* get请求
*/
private static final int GET = 1;
/**
* post请求
*/
private static final int POST = 2;
private static final String TAG = OKHttpActivity.class.getSimpleName();
private Button btn_get_post;
private TextView tv_result;
private Button btn_get_okhttputils;
private Button btn_downloadfile;
private ProgressBar mProgressBar;
private Button btn_uploadfile;
private Button btn_image;
private Button btn_image_list;
private ImageView iv_icon;
private OkHttpClient client = new OkHttpClient();
private Handler handler = new Handler() {
@Override
public void handleMessage(Message msg) {
super.handleMessage(msg);
switch (msg.what) {
case GET:
//获取数据
tv_result.setText((String) msg.obj);
break;
case POST:
//获取数据
tv_result.setText((String) msg.obj);
break;
}
}
};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_okhttp);
btn_get_post = (Button) findViewById(R.id.btn_get_post);
tv_result = (TextView) findViewById(R.id.tv_result);
btn_get_okhttputils = (Button) findViewById(R.id.btn_get_okhttputils);
btn_downloadfile = (Button) findViewById(R.id.btn_downloadfile);
mProgressBar = (ProgressBar) findViewById(R.id.progressBar);
btn_uploadfile = (Button) findViewById(R.id.btn_uploadfile);
iv_icon = (ImageView) findViewById(R.id.iv_icon);
btn_image = (Button) findViewById(R.id.btn_image);
btn_image_list = (Button) findViewById(R.id.btn_image_list);
//设置点击事件
btn_get_post.setOnClickListener(this);
btn_get_okhttputils.setOnClickListener(this);
btn_downloadfile.setOnClickListener(this);
btn_uploadfile.setOnClickListener(this);
btn_image.setOnClickListener(this);
btn_image_list.setOnClickListener(this);
}
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.btn_get_post://使用原生的okhttp请求网络数据,get和post
tv_result.setText("");
getDataFromPost();//点击事件
break;
case R.id.btn_get_okhttputils:
// getDataGetByOkhttpUtils();
getDataPostByOkhttpUtils();
break;
case R.id.btn_downloadfile://下载文件
downloadFile();
break;
case R.id.btn_uploadfile://文件上传
multiFileUpload();
break;
case R.id.btn_image://请求单张图片
getImage();
break;
case R.id.btn_image_list://请求列表中的图片
Intent intent = new Intent(OKHttpActivity.this,OKHttpListActivity.class);
startActivity(intent);
break;
}
}
/**
* 使用get请求网络数据
*/
private void getDataFromGet() {
new Thread() {
@Override
public void run() {
super.run();
try {
String result = get("http://api.m.mtime.cn/PageSubArea/TrailerList.api");
Log.e("TAG", result);
Message msg = Message.obtain();
msg.what = GET;
msg.obj = result;
handler.sendMessage(msg);
} catch (IOException e) {
e.printStackTrace();
}
}
}.start();
}
/**
* 使用post请求网络数据
*/
private void getDataFromPost() {
new Thread() {
@Override
public void run() {
super.run();
try {
String result = post("http://api.m.mtime.cn/PageSubArea/TrailerList.api", "");
Log.e("TAG", result);
Message msg = Message.obtain();
msg.what = POST;
msg.obj = result;
handler.sendMessage(msg);
} catch (IOException e) {
e.printStackTrace();
}
}
}.start();
}
/**
* get请求
*
* @param url 网络连接
* @return
* @throws IOException
*/
private String get(String url) throws IOException {
Request request = new Request.Builder()
.url(url)
.build();
Response response = client.newCall(request).execute();
return response.body().string();
}
/**
* okhttp3的post请求
*
* @param url
* @param json
* @return
* @throws IOException
*/
private String post(String url, String json) throws IOException {
RequestBody body = RequestBody.create(JSON, json);
Request request = new Request.Builder()
.url(url)
.post(body)
.build();
Response response = client.newCall(request).execute();
return response.body().string();
}
/**
* 使用okhttp-utils的get请求网络文本数据
*/
public void getDataGetByOkhttpUtils() {
String url = "http://www.zhiyun-tech.com/App/Rider-M/changelog-zh.txt";
// url="http://www.391k.com/api/xapi.ashx/info.json?key=bd_hyrzjjfb4modhj&size=10&page=1";
url = "http://api.m.mtime.cn/PageSubArea/TrailerList.api";
OkHttpUtils
.get()
.url(url)
.id(100)
.build()
.execute(new MyStringCallback());
}
/**
* 使用okhttp-utils的post请求网络文本数据
*/
public void getDataPostByOkhttpUtils() {
String url = "http://www.zhiyun-tech.com/App/Rider-M/changelog-zh.txt";
// url="http://www.391k.com/api/xapi.ashx/info.json?key=bd_hyrzjjfb4modhj&size=10&page=1";
url = "http://api.m.mtime.cn/PageSubArea/TrailerList.api";
OkHttpUtils
.post()
.url(url)
.id(100)
.build()
.execute(new MyStringCallback());
}
public class MyStringCallback extends StringCallback {
@Override
public void onBefore(Request request, int id) {
setTitle("loading...");
}
@Override
public void onAfter(int id) {
setTitle("Sample-okHttp");
}
@Override
public void onError(Call call, Exception e, int id) {
e.printStackTrace();
tv_result.setText("onError:" + e.getMessage());
}
@Override
public void onResponse(String response, int id) {
Log.e(TAG, "onResponse:complete");
tv_result.setText("onResponse:" + response);
switch (id) {
case 100:
Toast.makeText(OKHttpActivity.this, "http", Toast.LENGTH_SHORT).show();
break;
case 101:
Toast.makeText(OKHttpActivity.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));
}
}
/**
* 使用okhttp-utils下载大文件
*/
public void downloadFile()
{
String url = "http://vfx.mtime.cn/Video/2016/07/24/mp4/160724055620533327_480.mp4";
OkHttpUtils//
.get()//
.url(url)//
.build()//
.execute(new FileCallBack(Environment.getExternalStorageDirectory().getAbsolutePath(), "okhttp-utils-test.mp4")//
{
@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());
}
});
}
/**
* 使用okhttp-utils上传多个或者单个文件
*/
public void multiFileUpload()
{
String mBaseUrl = "http://192.168.0.165:8080/FileUpload/FileUploadServlet";
File file = new File(Environment.getExternalStorageDirectory(), "afu.png");
File file2 = new File(Environment.getExternalStorageDirectory(), "test.txt");
if (!file.exists()||!file2.exists())
{
Toast.makeText(OKHttpActivity.this, "文件不存在,请修改文件路径", Toast.LENGTH_SHORT).show();
return;
}
Map<String, String> params = new HashMap<>();
params.put("username", "杨光福");
params.put("password", "123");
String url = mBaseUrl ;
OkHttpUtils.post()//
.addFile("mFile", "server_afu.png", file)//
.addFile("mFile", "server_test.txt", file2)//
.url(url)
.params(params)//
.build()//
.execute(new MyStringCallback());
}
public void getImage()
{
tv_result.setText("");
String url = "http://images.csdn.net/20150817/1.jpg";
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) {
tv_result.setText("onError:" + e.getMessage());
}
@Override
public void onResponse(Bitmap bitmap, int id) {
Log.e("TAG", "onResponse:complete");
iv_icon.setImageBitmap(bitmap);
}
});
}
}
Android 普通okhttp、okhttp utils执行 post get请求,文件上传下载、请求图片的更多相关文章
- Android okHttp网络请求之文件上传下载
前言: 前面介绍了基于okHttp的get.post基本使用(http://www.cnblogs.com/whoislcj/p/5526431.html),今天来实现一下基于okHttp的文件上传. ...
- SSM + Android 网络文件上传下载
SSM + Android 网络交互的那些事 2016年12月14日 17:58:36 ssm做为后台与android交互,相信只要是了解过的人都知道一些基本的数据交互,向json,对象,map的交互 ...
- 批量执行(Linux命令,上传/下载文件)
前言: 每个公司的网络环境大都划分 办公网络.线上网络,之所以划分的主要原因是为了保证线上操作安全: 对于外部用户而言也只能访问线上网络的特定开放端口,那么是什么控制了用户访问线上网络的呢? 防火墙过 ...
- Python Paramiko实现sftp文件上传下载以及远程执行命令
一.简介 Paramiko模块是基于Python实现的SSH远程安全连接,用于SSH远程执行命令.文件传输等功能. 安装模块 默认Python没有自带,需要手动安装: pip3 install par ...
- Android与Asp.Net Web服务器的文件上传下载BUG汇总[更新]
遇到的问题: 1.java.io.IOException: open failed: EINVAL (Invalid argument)异常,在模拟器中的sd卡创建文件夹和文件时报错 出错原因可能是: ...
- Android 开发工具类 32_通过 HTTP 协议实现文件上传
完成像带有文件的用户数据表单的上传,而且可以上传多个文件,这在用户注册并拍照时尤其有用. import java.io.BufferedReader; import java.io.ByteArray ...
- OkHttp 优雅封装 HttpUtils 之 上传下载解密
曾经在代码里放荡不羁,如今在博文中日夜兼行,只为今天与你分享成果.如果觉得本文有用,记得关注我,我将带给你更多. 还没看过第一篇文章的欢迎移步:OkHttp 优雅封装 HttpUtils 之气海雪山初 ...
- RxHttp 完美适配Android 10/11 上传/下载/进度监听
1.前言 随着Android 11的正式发布,适配Android 10/11 分区存储就更加的迫切了,因为Android 11开始,将强制开启分区存储,我们就无法再以绝对路径的方式去读写非沙盒目录下的 ...
- android批量文件上传(android批量图片上传)
项目中多处用到文件批量上传功能,今天正好解决了此问题,在此写出来,以便日后借鉴. 首先,以下架构下的批量文件上传可能会失败或者不会成功: 1.android客户端+springMVC服务端:服务端 ...
随机推荐
- 如何部署和运行Scut服务器及游戏:Windows篇
概述 Scut游戏引擎是一个永久免费的全脚本游戏服务器框架,采用MVC框架设计,简化数据库设计和编码工作:降低对开发人员的开发难度:同时提供了丰富的类库和API接口. 一. 安装环境 必须安装的 ...
- [CentOS]怎样解决gcc版本号冲突?
今天碰到一个比較坑爹的问题.在centos上用yum安装编译环境,执行: yum -y install make gcc gcc-c++ kernel-devel m4 ncurses-devel o ...
- ASP.NET Web API是如何根据请求选择Action的?[下篇] 【转】
再<上篇>中我们简单介绍了用于实现Action选择机制的HttpActionSelector,接下来我们来讨论本章最为核心的内 容:ASP.NET Web API如何利用HttpActio ...
- C++/C# 托管扩展 更改概要 [转]
源文 :https://msdn.microsoft.com/zh-cn/library/ms235298%28v=vs.100%29.aspx Visual Studio 2010 其他版本 此概要 ...
- TensorFlow笔记四:从生成和保存模型 -> 调用使用模型
TensorFlow常用的示例一般都是生成模型和测试模型写在一起,每次更换测试数据都要重新训练,过于麻烦, 以下采用先生成并保存本地模型,然后后续程序调用测试. 示例一:线性回归预测 make.py ...
- 【Python】matplotlib绘制折线图
一.绘制简单的折线图 import matplotlib.pyplot as plt squares=[1,4,9,16,25] plt.plot(squares) plt.show() 我们首先导入 ...
- js:string转int
http://blog.csdn.net/leidengyan/article/details/5503594 <script> var str='1250' ; aler ...
- VS2010编译OpenSSL(两个版本)
第一个版本: 编译工具 VS2010 OpenSSL版本 openssl-1.0.0a 下载 OpenSSL http://www.openssl.org/ 下载 from http://www.ac ...
- linux使用crontab实现PHP执行定时任务(转)
前几天写过一篇文章,利用单纯的php实现定时执行任务,但是效率不佳,对于linux来说用crontab实现更加合理. 首先说说cron,它是一个linux下的定时执行工具.根用户以外的用户可以使用 c ...
- MySQL的安装过程
近期对MySQL做了一些研究. 曾经主要接触的是SQL SERVER.所以,今天对该安装过程做了一些总结以及使用过程中的一些心得.并分享给大家. 记得前面.分享过一篇关于数据库的几种连接方式.而 ...