OKhttp的封装(上)
自从介绍了OKhttp3的一些基本使用之后,又偷了下懒,所以它的续篇被搁置了一段时间,现在补充。 OKhttpManager.Class 请求工具类
package com.example.administrator.okhttp3; import android.os.Handler;
import android.os.Looper; import java.io.IOException;
import java.util.HashMap;
import java.util.Map; import okhttp3.Call;
import okhttp3.Callback;
import okhttp3.FormBody;
import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.RequestBody;
import okhttp3.Response; /**
* Created by ${火龙裸先生} on 2016/9/28.
* 邮箱:791335000@qq.com
* <p/>
* OKhttpManager OKhttp封装类
*/
public class OKhttpManager {
private OkHttpClient client;
private static OKhttpManager oKhttpManager;
private Handler mHandler; /**
* 单例获取 OKhttpManager实例
*/
private static OKhttpManager getInstance() {
if (oKhttpManager == null) {
oKhttpManager = new OKhttpManager();
}
return oKhttpManager;
} private OKhttpManager() {
client = new OkHttpClient();
mHandler = new Handler(Looper.getMainLooper());
} /**************
* 内部逻辑处理
****************/
private Response p_getSync(String url) throws IOException {
Request request = new Request.Builder().url(url).build();
Response response = client.newCall(request).execute();
return response;
} private String p_getSyncAsString(String url) throws IOException {
return p_getSync(url).body().string();
} private void p_getAsync(String url, final DataCallBack callBack) {
final Request request = new Request.Builder().url(url).build();
client.newCall(request).enqueue(new Callback() {
@Override
public void onFailure(Call call, IOException e) {
deliverDataFailure(call, e, callBack);
} @Override
public void onResponse(Call call, Response response) {
try {
String result = response.body().string();
deliverDataSuccess(result, callBack);
} catch (IOException e) {
deliverDataFailure(call, e, callBack);
}
}
});
} private void p_postAsync(String url, Map<String, String> params, final DataCallBack callBack) {
RequestBody requestBody = null; if (params == null) {
params = new HashMap<String, String>();
}
FormBody.Builder builder = new FormBody.Builder();
for (Map.Entry<String, String> entry : params.entrySet()) {
String key = entry.getKey().toString();
String value = null;
if (entry.getValue() == null) {
value = "";
} else {
value = entry.getValue().toString();
}
builder.add(key, value);
}
requestBody = builder.build();
final Request request = new Request.Builder().url(url).post(requestBody).build();
client.newCall(request).enqueue(new Callback() {
@Override
public void onFailure(Call call, IOException e) {
deliverDataFailure(call, e, callBack);
} @Override
public void onResponse(Call call, Response response) throws IOException {
try {
String result = response.body().string();
deliverDataSuccess(result, callBack);
} catch (IOException e) {
deliverDataFailure(call, e, callBack);
}
}
});
} /**
* 数据分发的方法
*/
private void deliverDataFailure(final Call call, final IOException e, final DataCallBack callBack) {
mHandler.post(new Runnable() {
@Override
public void run() {
if (callBack != null) {
callBack.requestFailure(call, e);
}
}
});
} private void deliverDataSuccess(final String result, final DataCallBack callBack) {
mHandler.post(new Runnable() {
@Override
public void run() {
if (callBack != null) {
callBack.requestSuccess(result);
}
}
});
} /******************
* 对外公布的方法
*****************/
public static Response getSync(String url) throws IOException {
return getInstance().p_getSync(url);//同步GET,返回Response类型数据
} public static String getSyncAsString(String url) throws IOException {
return getInstance().p_getSyncAsString(url);//同步GET,返回String类型数据
} public static void getAsync(String url, DataCallBack callBack) {
getInstance().p_getAsync(url, callBack);//异步GET请求
} public static void postAsync(String url, Map<String, String> params, DataCallBack callBack) {
getInstance().p_postAsync(url, params, callBack);//异步POST请求
} /**
* 数据回调接口
*/
public interface DataCallBack {
void requestFailure(Call call, IOException e); void requestSuccess(String result);
} }
MainActivity.class 工具类的调用方法
package com.example.administrator.okhttp3; import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.Button;
import android.widget.TextView; import java.io.IOException;
import java.util.HashMap;
import java.util.Map; import okhttp3.Call;
import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.Response; public class MainActivity extends AppCompatActivity implements View.OnClickListener {
private static OkHttpClient client = new OkHttpClient();
private Request request;
private Response response; private Button button1, button2, button3, button4;
private TextView textView; @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
button1 = (Button) findViewById(R.id.btn_one);
button2 = (Button) findViewById(R.id.btn_two);
button3 = (Button) findViewById(R.id.btn_three);
button4 = (Button) findViewById(R.id.btn_four);
button1.setOnClickListener(this);
button2.setOnClickListener(this);
button3.setOnClickListener(this);
button4.setOnClickListener(this);
textView = (TextView) findViewById(R.id.tv);
} @Override
public void onClick(View view) {
switch (view.getId()) {
case R.id.btn_one://同步GET 调用方法 new Thread(new Runnable() {
@Override
public void run() {
try {
final String message = OKhttpManager.getSyncAsString("http://cache.video.iqiyi.com/jp/avlist/202861101/1/?callback=jsonp9");
runOnUiThread(new Runnable() {
@Override
public void run() {
textView.setText(message);
}
});
} catch (IOException e) {
e.printStackTrace();
}
}
}).start(); break;
case R.id.btn_two://异步GET 调用方法
OKhttpManager.getAsync("http://web.juhe.cn:8080/finance/exchange/rmbquot", new OKhttpManager.DataCallBack() {
@Override
public void requestFailure(Call call, IOException e) {
/**
* 加载失败,回调这个方法
* */
} @Override
public void requestSuccess(String result) {
textView.setText(result);
}
});
break;
case R.id.btn_three://POST提交表单 调用方法
Map<String, String> params = new HashMap<>();
params.put("cellphone", "123456");//用户名
params.put("password", "123456");//密码
OKhttpManager.postAsync("http://58.250.31.19:28080/afeducation/appfront/main/loginUser_app.do", params, new OKhttpManager.DataCallBack() {
@Override
public void requestFailure(Call call, IOException e) {
textView.setText(e.toString());
} @Override
public void requestSuccess(String result) {
textView.setText(result);
}
});
break;
case R.id.btn_four://文件下载 调用方法 break;
}
}
}
activity_main.xml 布局文件
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context="com.example.administrator.okhttp3.MainActivity"> <Button
android:id="@+id/btn_one"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="同步get" /> <Button
android:id="@+id/btn_two"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="异步get" /> <Button
android:id="@+id/btn_three"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Post提交表单" /> <Button
android:id="@+id/btn_four"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="文件下载" /> <TextView
android:id="@+id/tv"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="text" />
</LinearLayout>
以前都是用Volley去进行网络交互,时间久了,也想换换新的东西。网络请求框架各具特色,需要自己不断探索和选择。加油!
OKhttp的封装(上)的更多相关文章
- OkHttp 优雅封装 HttpUtils 之 上传下载解密
曾经在代码里放荡不羁,如今在博文中日夜兼行,只为今天与你分享成果.如果觉得本文有用,记得关注我,我将带给你更多. 还没看过第一篇文章的欢迎移步:OkHttp 优雅封装 HttpUtils 之气海雪山初 ...
- 安卓OKhttp请求封装
目前安卓开发中使用的网络工具为OKhttp,但是okhttp的使用还不是很方便,在okhttp的基础上再对请求进行封装会极大的方便网络调用. 下面直接上代码. 请求封装 public class Ht ...
- OkHttp 优雅封装 OkHttps 之 回调线程魔变
第一篇:OkHttp 优雅封装 HttpUtils 之 气海雪山初探 第二篇:OkHttp 优雅封装 HttpUtils 之 上传下载解密 简介 HttpUtils 从 v2.3.0 之后便重命名了, ...
- OkHttp 优雅封装 HttpUtils 之 气海雪山初探
曾经在代码里放荡不羁,如今在博文中日夜兼行,只为今天与你分享成果.如果觉得本文有用,记得关注我,我将带给你更多. 介绍 HttpUtils 是近期开源的对 OkHttp 轻量封装的框架,它独创的异步预 ...
- android 开发 - 使用okhttp框架封装的开发框架
概述 在android开发中经常要访问网络,目前最流行的网络访问框架就是Okhttp了,然而我们在具体使用时,往往仍然需要二次封装.我使用Builder设计模式进行了封装形成oknet开源库. 介绍 ...
- 基于OkHttp的封装库TigerOkHttp的使用
在前面熟悉了OkHttp的用法之后,为了简化用法同时适用于我的项目,我针对OkHttp进行了更进一步的封装(源码及其Demo地址在https://github.com/huyongli/TigerOk ...
- Okhttp实用封装
概述 对okhttp的get,put,delete,post请求简单封装,减少了不必要的冗余代码 详细 代码下载:http://www.demodashi.com/demo/11101.html 在自 ...
- RecyclerViewLoadMoreDemo【封装上拉加载功能的RecyclerView,搭配SwipeRefreshLayout实现下拉刷新】
版权声明:本文为HaiyuKing原创文章,转载请注明出处! 前言 封装含有上拉加载功能的RecyclerView,然后搭配SwipeRefreshLayout实现下拉刷新.上拉加载功能. 在项目中将 ...
- OkHttp实现文件上传进度
文件上传就一个没刻度的进度条在那里转怎么行,本篇带你实现上传进度,为你的进度条添加刻度吧,啥都不说了,重点重写RequestBody,看代码 import com.squareup.okhttp.*; ...
随机推荐
- caller和callee
我们先来看下caller. caller:返回一个对函数(该函数调用了当前函数)的引用. functionName.caller:functionName对象是所执行函数的名称. 说明 对于函数来说, ...
- nginx TCP 代理& windows傻瓜式安装
一.下载nginx Windows http://nginx.org/en/download.html 二.解压到目录 三.进入目录并start nginx.exe即可启动 cd d:/java/ng ...
- linxu scp命令
\ svn 删除所有的 .svn文件 find . -name .svn -type d -exec rm -fr {} \; linux之cp/scp命令+scp命令详解 名称:cp 使用权限: ...
- HttpClient连接池的连接保持、超时和失效机制
HTTP是一种无连接的事务协议,底层使用的还是TCP,连接池复用的就是TCP连接,目的就是在一个TCP连接上进行多次的HTTP请求从而提高性能.每次HTTP请求结束的时候,HttpClient会判断连 ...
- findByExample(Object exampleEntity)方法得到的List判断是否为空,不可用(lis != null)
用findByExample(Object exampleEntity)方法可以应用在用户登录上面,获得有登陆名和密码的user对象进行查询. 返回两者都符合的对象列表,为空则登陆失败. 错误的方法: ...
- java的封装
- Javascript高级程序设计——执行环境与作用域
Javascript中执行环境是定义了变量或函数有权访问的其他数据,决定了各自的行为,每个执行的环境都有一个与之关联的变量对象,环境中定义的所以变量和函数都保存在这个对象中. 全局执行环境是最外围的一 ...
- JQuery data方法的使用-遁地龙卷风
(-1)说明 我用的是chrome49,这个方法涉及到JQuery版本问题,我手里有3.0的,有1.9.1,后面将1.9.1及其以前的称为低版本,3.0称为高版本 测试例子用到的showMessage ...
- HDU 1058 Humble Numbers(离线打表)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1058 解题报告:输入一个n,输出第n个质因子只有2,3,5,7的数. 用了离线打表,因为n最大只有58 ...
- iOS开发——高级篇——iOS键盘的相关设置(UITextfield)
一.键盘风格 UIKit框架支持8种风格键盘. typedef enum { UIKeyboardTypeDefault, // 默认键盘:支持所有字符 UIKeyboardTypeASCIICapa ...