最近打算在新项目中使用 okhttp3, 简单封装了一下异步 get post

因为 CallBack 也是在子线程中执行,所以用到了 Handler

public class MyOkHttpClient {
private static MyOkHttpClient myOkHttpClient;
private OkHttpClient okHttpClient;
private Handler handler; private MyOkHttpClient() {
okHttpClient = new OkHttpClient();
handler = new Handler(Looper.getMainLooper());
} public static MyOkHttpClient getInstance() {
if (myOkHttpClient == null) {
synchronized (MyOkHttpClient.class) {
if (myOkHttpClient == null) {
myOkHttpClient = new MyOkHttpClient();
}
}
} return myOkHttpClient;
} class StringCallBack implements Callback {
private HttpCallBack httpCallBack;
private Request request; public StringCallBack(Request request, HttpCallBack httpCallBack) {
this.request = request;
this.httpCallBack = httpCallBack;
} @Override
public void onFailure(Call call, IOException e) {
final IOException fe = e;
if (httpCallBack != null) {
handler.post(new Runnable() {
@Override
public void run() {
httpCallBack.onError(request, fe);
}
});
}
} @Override
public void onResponse(Call call, Response response) throws IOException {
final String result = response.body().string();
if (httpCallBack != null) {
handler.post(new Runnable() {
@Override
public void run() {
httpCallBack.onSuccess(request, result);
}
});
}
}
} public void asyncGet(String url, HttpCallBack httpCallBack) {
Request request = new Request.Builder().url(url).build();
okHttpClient.newCall(request).enqueue(new StringCallBack(request, httpCallBack));
} public void asyncPost(String url, FormBody formBody, HttpCallBack httpCallBack) {
Request request = new Request.Builder().url(url).post(formBody).build();
okHttpClient.newCall(request).enqueue(new StringCallBack(request, httpCallBack));
} public interface HttpCallBack {
void onError(Request request, IOException e); void onSuccess(Request request, String result);
}
}

使用

FormBody formBody = new FormBody.Builder().add("username", "lesiefang").add("age", "28").build();
MyOkHttpClient.getInstance().asyncPost("http://192.168.94.131:5000/aaa/", formBody, new MyOkHttpClient.HttpCallBack() {
@Override
public void onError(Request request, IOException e) {
Log.d("aaa", e.toString());
} @Override
public void onSuccess(Request request, String result) {
textView.setText(result);
}
});

至于上传文件、下载文件什么的用到时再封装一个类似的方法就行了

okhttp3 get post 简单封装的更多相关文章

  1. Android--Retrofit+RxJava的简单封装(三)

    1,继续接着上一篇的讲讲,话说如果像上一篇这样的话,那么我们每一次请求一个结构都要创建一堆的Retrofit对象,而且代码都是相同的,我们可以试试封装一下 先创建一个HttpMethods类,将Ret ...

  2. Android AsyncTask 深度理解、简单封装、任务队列分析、自定义线程池

    前言:由于最近在做SDK的功能,需要设计线程池.看了很多资料不知道从何开始着手,突然发现了AsyncTask有对线程池的封装,so,就拿它开刀,本文将从AsyncTask的基本用法,到简单的封装,再到 ...

  3. FMDB简单封装和使用

    工具:火狐浏览器+SQLite Manager插件 ; Xcode; FMDB库; 效果: 项目地址: https://github.com/sven713/PackFMDB 主要参考这两篇博客: 1 ...

  4. python网页请求urllib2模块简单封装代码

    这篇文章主要分享一个python网页请求模块urllib2模块的简单封装代码. 原文转自:http://www.jbxue.com/article/16585.html 对python网页请求模块ur ...

  5. 对pymysql的简单封装

    #coding=utf-8 #!/usr/bin/python import pymysql class MYSQL: """ 对pymysql的简单封装 "& ...

  6. iOS开发——UI篇OC篇&UITableView简单封装

    UITableView简单封装 UITableView时iOS开发中使用最多也是最重的一个UI空间,其实在App Store里面的%80以上的应用都用到了这个控件,所以就给大家介绍一下,前面的文章中也 ...

  7. iOS sqlite 增删改查 简单封装(基于 FMDB)

    /** *  对 sqlite 的使用进行简单封装,仅涉及简单的单表 增删改查 * *  基于 FMDB * *  操作基于 model ,数据库表字段与 model 属性一一对应,对 model 整 ...

  8. ADO简单封装(MFC)

    简单封装了一下,不是很严谨. /************************************************************************/ /* INSTRUC ...

  9. MySQL的C++简单封装

    /* *介绍:MySQL的简单封装,支持流操作输入输出MySQL语句,然而并没有什么软用,大二学生自娱自乐,有不足求指点 *作者:MrEO *日期:2016.3.26 */ 头文件 my_sql.h ...

随机推荐

  1. Linux守护进程的启动方法

    导读 “守护进程”(daemon)就是一直在后台运行的进程(daemon),通常在系统启动时一同把守护进程启动起来,本文介绍如何将一个 Web 应用,启动为守护进程. 一.问题的由来 Web应用写好后 ...

  2. sqlmap参数大全

    -u #注入点-f #指纹判别数据库类型-b #获取数据库版本信息-p #指定可测试的参数(?page=1&id=2 -p “page,id”)-D “”#指定数据库名-T “”#指定表名-C ...

  3. 坚持不懈之linux haproxy的配置文件关键字查询手册

    1.关键词balance balance用于定义负载均衡的算法,可用于defaults.listen和backend中. balance使用方法如下: balance <algorithm> ...

  4. PHP 遍历数组的方法汇总

    1. foreach() foreach()是一个用来遍历数组中数据的最简单有效的方法. #example1: <?php $colors= array('red','blue','green' ...

  5. shell脚本调试之工具——bashdb

    bash是Unix/Linux操作系统最常用的shell之一,它非常灵活,和awk.c++配合起来异常强大 以下使用一个测试脚本来说明使用bash调试的方法 test.sh #!/bin/bash e ...

  6. 《ASP.NET MVC4 WEB编程》学习笔记------RenderBody,RenderPage,RenderSection

    ASP.NET MVC 3 已经正式发布了,现在估计许多人都在拼命学,我也不能例外,刚刚看到了一篇文章,介绍了三个非常有用的方法:RenderBody,RenderPage和RenderSection ...

  7. vs2013秘钥

    Ultimate:BWG7X-J98B3-W34RT-33B3R-JVYW9 Premium:FBJVC-3CMTX-D8DVP-RTQCT-92494  YKCW6-BPFPF-BT8C9-7DCT ...

  8. php抽象类的简单应用

    抽象类也是面向对象中的重要概念,和接口.继承的概念重要性相当,在面向对象的开发中,所有的对象都是通过类来描述的,但是反过来,并不是所有类都是用来描绘对象的,广义上讲如果一个类中没有足够信息来描述一个具 ...

  9. mysql生成varchar类型主键排序

    用uuid生成20位的主键 SELECT LEFT(REPLACE(UUID(), '-', ''),20) FROM DUAL 另一种方法: 因为数据库中有字母 需要排序的时候去除字母,重新取最大值 ...

  10. 新建myeclipse工作空间需要的工作

    接触了许多个项目,都挺大的,每次都需要配置,简单总结总结. 第一.右击项目,选择Text file encoding 第二.点击window-->preferences-->myeclip ...