自从介绍了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的封装(上)的更多相关文章

  1. OkHttp 优雅封装 HttpUtils 之 上传下载解密

    曾经在代码里放荡不羁,如今在博文中日夜兼行,只为今天与你分享成果.如果觉得本文有用,记得关注我,我将带给你更多. 还没看过第一篇文章的欢迎移步:OkHttp 优雅封装 HttpUtils 之气海雪山初 ...

  2. 安卓OKhttp请求封装

    目前安卓开发中使用的网络工具为OKhttp,但是okhttp的使用还不是很方便,在okhttp的基础上再对请求进行封装会极大的方便网络调用. 下面直接上代码. 请求封装 public class Ht ...

  3. OkHttp 优雅封装 OkHttps 之 回调线程魔变

    第一篇:OkHttp 优雅封装 HttpUtils 之 气海雪山初探 第二篇:OkHttp 优雅封装 HttpUtils 之 上传下载解密 简介 HttpUtils 从 v2.3.0 之后便重命名了, ...

  4. OkHttp 优雅封装 HttpUtils 之 气海雪山初探

    曾经在代码里放荡不羁,如今在博文中日夜兼行,只为今天与你分享成果.如果觉得本文有用,记得关注我,我将带给你更多. 介绍 HttpUtils 是近期开源的对 OkHttp 轻量封装的框架,它独创的异步预 ...

  5. android 开发 - 使用okhttp框架封装的开发框架

    概述 在android开发中经常要访问网络,目前最流行的网络访问框架就是Okhttp了,然而我们在具体使用时,往往仍然需要二次封装.我使用Builder设计模式进行了封装形成oknet开源库. 介绍 ...

  6. 基于OkHttp的封装库TigerOkHttp的使用

    在前面熟悉了OkHttp的用法之后,为了简化用法同时适用于我的项目,我针对OkHttp进行了更进一步的封装(源码及其Demo地址在https://github.com/huyongli/TigerOk ...

  7. Okhttp实用封装

    概述 对okhttp的get,put,delete,post请求简单封装,减少了不必要的冗余代码 详细 代码下载:http://www.demodashi.com/demo/11101.html 在自 ...

  8. RecyclerViewLoadMoreDemo【封装上拉加载功能的RecyclerView,搭配SwipeRefreshLayout实现下拉刷新】

    版权声明:本文为HaiyuKing原创文章,转载请注明出处! 前言 封装含有上拉加载功能的RecyclerView,然后搭配SwipeRefreshLayout实现下拉刷新.上拉加载功能. 在项目中将 ...

  9. OkHttp实现文件上传进度

    文件上传就一个没刻度的进度条在那里转怎么行,本篇带你实现上传进度,为你的进度条添加刻度吧,啥都不说了,重点重写RequestBody,看代码 import com.squareup.okhttp.*; ...

随机推荐

  1. 连接到kali linux服务器上的MySQL服务器错误

    前言:想把数据库什么的都放在虚拟机kali Linux里,但无奈出了好多错误. 首先:可以参照上一篇文章开启kali服务器端的远程连接功能,上一篇文章 然后:使用window端的sqlyog(MySQ ...

  2. 【PHP面向对象(OOP)编程入门教程】10.__set(),__get(),__isset(),__unset()四个方法的应用

    一般来说,总是把类的属性定义为private,这更符合现实的逻辑.但是, 对属性的读取和赋值操作是非常频繁的,因此在PHP5中,预定义了两个函数”__get()”和”__set()”来获取和赋值其属性 ...

  3. 使用ASP.Net WebAPI构建REST服务(一)——简单的示例

    由于给予REST的Web服务非常简单易用,它越来越成为企业后端服务集成的首选方法.本文这里介绍一下如何通过微软的Asp.Net WebAPI快速构建REST-ful 服务. 首先创建一个Asp.Net ...

  4. webpack 教程 那些事儿05-多页应用

    本篇主要关于如何用webpack构建多页应用 为什么要构建多页应用呢?因为我的项目本来就是多页应用啊至于为什么要用webpack?因为我要用vue啊,嫌gulp 每次打包慢 啊 文章目录 1. 利用v ...

  5. iOS开发——高级篇——iOS键盘的相关设置(UITextfield)

    一.键盘风格 UIKit框架支持8种风格键盘. typedef enum { UIKeyboardTypeDefault, // 默认键盘:支持所有字符 UIKeyboardTypeASCIICapa ...

  6. ex6的选择器

    前面的话 尽管DOM作为API已经非常完善了,但是为了实现更多的功能,DOM仍然进行了扩展,其中一个重要的扩展就是对选择器API的扩展.人们对jQuery的称赞,很多是由于jQuery方便的元素选择器 ...

  7. js图文讲解

       

  8. UIMenuController使用

    - (void)bubbleDidLongPress:(UILongPressGestureRecognizer *)gestureRecognizer { if(gestureRecognizer. ...

  9. cocos2d事件处理机制之我见

    cocos2d是使用pyglet事件框架来处理事件的. 其中,包括分发器(发射器)和监听器两部分.下面形象的来打个比方. 这个机制就好比一把枪,三步:扣扳机(触发),上弹(注册),给子弹上***(这个 ...

  10. [TimusOJ1057]Amount of Degrees

    [TimusOJ1057]Amount of Degrees 试题描述 Create a code to determine the amount of integers, lying in the ...