浅谈Android studio中OKHttp安装及简单使用

Google貌似在6.0版本里面删除了HttpClient相关API,鉴于okhttp的口碑相当好,介绍一下OKHttp的安装及使用:

一.安装

对于Android Studio的用户,在Project Structure--->Dependencies 点击“+”号选Library dependency在搜索页面分别搜okttp,okio

注:okhttp内部依赖okio,别忘了同时导入okio

二.用法

(一)Http Get  Http Post

//创建okHttpClient对象,设置超时

1 OkHttpClient mOKHttpClient = new OkHttpClient.Builder()
2         .connectTimeout(10, TimeUnit.SECONDS)
3         .readTimeout(10, TimeUnit.SECONDS)
4         .build();

get、post请求除了请求体和请求方法不同,其他设置是相同的

首先说一下2.x到3.x关于POST请求的请求体类的改变:

在2.x中是 类名是:FormEncodingBuilder()

使用FormEncodingBuilder builder = new FormEncodingBuilder();  
builder.add("username","name");

在3.x中是 类名是: FormBody,但是一般使用是 RequestBody requestBodyPost = new FormBody.Builder()

需要说明一下FormBody是RequestBody的子类

本文采用3.x版本

1 //    请求参数:page=1&code=news&pageSize=20&parentid=0&type=1
2                 RequestBody requestBodyPost = new FormBody.Builder()
3                         .add("page", "1")
4                         .add("code", "news")
5                         .add("pageSize", "20")
6                         .add("parentid", "0")
7                         .add("type", "1")
8                         .build();

默认请求方法是get方法,.get()可以省略

1 Request request = new Request.Builder()
2                         .get()
3                         .url(GET_URL)
4                         .build();
5 Request requestPost = new Request.Builder()
6                         .url(POST_URL)
7                         .post(requestBodyPost)
8                         .build();

然后通过request的对象去构造得到一个Call对象

 1 //new call
 2 Call call = mOkHttpClient.newCall(request);
 3 //请求加入调度
 4 call.enqueue(new Callback()
 5         {
 6             @Override
 7             public void onFailure(Request request, IOException e)
 8             {
 9             }
10
11             @Override
12             public void onResponse(final Response response) throws IOException
13             {
14                     //String htmlStr =  response.body().string();
15             }
16         });             

需要注意几点:

  • onResponse回调的参数是response,一般情况下,比如我们希望获得返回的字符串,可以通过response.body().string()获取;如果希望获得返回的二进制字节数组,则调用response.body().bytes();如果你想拿到返回的inputStream,则调用response.body().byteStream()
  • onResponse执行的线程并不是UI线程,如果你希望操作控件,还是需要使用handler,runOnUiThread等操作ui

(二)基于Http的文件上传

上传文件和一般的带参数post请求不同之处在于RequestBody的构建

RequestBody的Builder和type因版本而已,2.x叫做MultipartBuilder,3.x叫做MultipartBody.Builder()。当我们需要做类似于表单上传的时候,就可以使用它来构造我们的requestBody。此处以3.x为例

 1 File file = new File(Environment.getExternalStorageDirectory(), "balabala.mp4");
 2 if (!file.exists()) {
 3                     Toast.makeText(MainActivity.this, "文件不存在", Toast.LENGTH_SHORT).show();
 4                 } else {
 5 RequestBody fileBody = RequestBody.create(MediaType.parse("application/octet-stream"), file);
 6 /* 2.x版本
 7 RequestBody requestBody = new MultipartBuilder()
 8          .type(MultipartBuilder.FORM)*/
 9 RequestBody requestBody = new MultipartBody.Builder()
10         .setType(MultipartBody.FORM)
11      .addPart(Headers.of(
12           "Content-Disposition",
13               "form-data; name=\"username\""),
14           RequestBody.create(null, "cxc"))
15     /* .addPart(Headers.of(
16          "Content-Disposition",
17          "form-data; name=\"mFile\";
18          filename=\"wjd.mp4\""), fileBody)*/
19 .addFormDataPart("mFile", file.getName(), fileBody)
20 .addFormDataPart("thumb", file.getName(),
21                 RequestBody.create(MediaType.parse("image/*"), file));
22 //添加其他参数
23 .addFormDataPart(key, value);
24      .build();
25 ·····}

说明:

提交json数据,MediaType.parse("application/json; charset=utf-8");

上传图片,MediaType.parse("image/*");

提交String,MediaType.parse("text/x-markdown; charset=utf-8")

上传文件,MediaType.parse("application/octet-stream")

addPart和addFormDataPart方法本质是一样的

通过上面设置上传图片,MP3,小的文件都没问题。

带有进度监听的上传下载请参考http://www.jcodecraeer.com/a/anzhuokaifa/androidkaifa/2015/0904/3416.html

时间: 2024-10-15 21:11:56

浅谈Android studio中OKHttp安装及简单使用的相关文章

浅谈Android开发中Shape的使用

引言 在Android开发中我们很多情况都是使用图片来展示相关效果,今天我就来详细介绍下Android下使用Shape来进行简单UI的开发.一方面这些是Android开发的基础,另一方面这方面的知识可以在一定程度上减少图片的使用,降低App的体积.下面我就来详细介绍Shape的相关知识. 注意点:一般用shape定义的xml文件存放在drawable目录下,若项目没有该目录则新建一个,而不要将它放到drawable-hdpi等目录中. Shape支持的类型形状    rectangle: 矩形,

android开发(0):android studio的下载安装与简单使用 | sdk的安装与编译

android studio,简称AS,是集成开发环境,所谓集成,就是集编辑.编译.调试.打包等于一体.简单来说,通过AS,就可以开发出在android系统上运行的APP. 我使用的是macos系统.在这个网站寻找AS来安装:https://developer.android.com/studio/ 这个网站的最下面有提到对电脑的最低要求. 下载3.2版本,安装. 安装后就可以启动as,如果是覆盖安装,比如从2.3升级到3.2,那可以按向导的指引,使用之前的偏好设置. 这时as这个ide已经安装

android studio中安装git

在android studio中方便的版本控制软件是git,当然还有其他的比如svn,但是和github一起常用算起来git方便很多怎么安装呢?请看下文: 第一步:下载安装git 先在你的电脑上安装git,去git官网上下载,http://www.git-scm.com/download/下载你的电脑对应的版本,安装的时候记住安装的路径比如D:\Git_Install\Git\bin 第二步:android studio 配置git 打开android studio的-----File ----

在android studio中安装findbugs

findbugs是android studio中一个很给力的插件,可以用来查找工程中的bug. 我是用的是android studio2.1.1,安装插件的步骤: Android Studio → Preferences → Plugins → Browse respositories → 查找FindBugs-IDEA → Install 然后重新启动Android Studio

Android Studio中安装Genymotion插件解决方案

之前讨论了在Eclipse中安装Genymotion插件,感觉还是比较麻烦的.现在我们要在Android Studio中安装Genymotion插件,比在Eclipse中方便多了.前提是你已经在电脑上安装了Genymotion.鉴于Eclipse的经验,在这里我们不介绍离线安装jar包的方式,也不推荐,现在而是使用在线的方式.具体步骤如下: (1)在Android Studio中选择File-->Settings,在出现的对话框左侧选择Plugins,然后在下方选择"Browser rep

浅谈Android系统开发中LOG的使用

文章转载至CSDN社区罗升阳的安卓之旅,原文地址:http://blog.csdn.net/luoshengyang/article/details/6581828 在程序开发过程中,LOG是广泛使用的用来记录程序执行过程的机制,它既可以用于程序调试,也可以用于产品运营中的事件记录.在Android系统中,提供了简单.便利的LOG机制,开发人员可以方便地使用.在这一篇文章中,我们简单介绍在Android内核空间和用户空间中LOG的使用和查看方法. 一. 内核开发时LOG的使用.Android内核

在Android studio中如何把项目放到远程git或从远程git得到项目:

主要记录了在Android studio 中如何把项目放到远程git或从远程得到项目: 因为它已经为我们提供了git插件,所有我们部署一下就可以直接使用了.方法如下: 1.准备:先下载window上的git(在不同的系统下载不同的git),然后安装. 2.在Android studio 里点击:File->Settings(如图1),然后进入Version Control->Git;(如图二)然后点击Test(出现图三表示成功). 图1 图二 图三 3.初始化git项目(git init),操

Windows环境下Android Studio v1.0安装教程

Windows环境下Android Studio v1.0安装教程 Windows环境下Android Studio v1.0安装教程 准备工具 JDK安装包. 要求:JDK 7以及以上版本. Android Studio安装文件. Windows: exe(包含SDK) (813 MB) exe(不包含SDK) (250 MB) zip (235 MB) Mac dmg (234 MB) zip (233 MB) Linux: zip (233 MB) 说明: 32位系统和64位系统是同一个安

关于Android Studio中启动模拟器时,报VT-x is disabled in BIOS错误的解决办法

有时候在Android Studio中启动一个模拟器去运行程序的时候,会出现下面的错误提示:"Intel HAXM is required to run this AVD,VT-x is disabled in BIOS". 接下来我来说说解决的办法: 1. 首先在SDK Manager中检查是否安装Download Intel x86 Emulator Accelerator (HAXM installer),如果没有安装,则在SDK Manager中下载安装Download Int