okhttp3 get post 简单封装
最近打算在新项目中使用 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 简单封装的更多相关文章
- Android--Retrofit+RxJava的简单封装(三)
1,继续接着上一篇的讲讲,话说如果像上一篇这样的话,那么我们每一次请求一个结构都要创建一堆的Retrofit对象,而且代码都是相同的,我们可以试试封装一下 先创建一个HttpMethods类,将Ret ...
- Android AsyncTask 深度理解、简单封装、任务队列分析、自定义线程池
前言:由于最近在做SDK的功能,需要设计线程池.看了很多资料不知道从何开始着手,突然发现了AsyncTask有对线程池的封装,so,就拿它开刀,本文将从AsyncTask的基本用法,到简单的封装,再到 ...
- FMDB简单封装和使用
工具:火狐浏览器+SQLite Manager插件 ; Xcode; FMDB库; 效果: 项目地址: https://github.com/sven713/PackFMDB 主要参考这两篇博客: 1 ...
- python网页请求urllib2模块简单封装代码
这篇文章主要分享一个python网页请求模块urllib2模块的简单封装代码. 原文转自:http://www.jbxue.com/article/16585.html 对python网页请求模块ur ...
- 对pymysql的简单封装
#coding=utf-8 #!/usr/bin/python import pymysql class MYSQL: """ 对pymysql的简单封装 "& ...
- iOS开发——UI篇OC篇&UITableView简单封装
UITableView简单封装 UITableView时iOS开发中使用最多也是最重的一个UI空间,其实在App Store里面的%80以上的应用都用到了这个控件,所以就给大家介绍一下,前面的文章中也 ...
- iOS sqlite 增删改查 简单封装(基于 FMDB)
/** * 对 sqlite 的使用进行简单封装,仅涉及简单的单表 增删改查 * * 基于 FMDB * * 操作基于 model ,数据库表字段与 model 属性一一对应,对 model 整 ...
- ADO简单封装(MFC)
简单封装了一下,不是很严谨. /************************************************************************/ /* INSTRUC ...
- MySQL的C++简单封装
/* *介绍:MySQL的简单封装,支持流操作输入输出MySQL语句,然而并没有什么软用,大二学生自娱自乐,有不足求指点 *作者:MrEO *日期:2016.3.26 */ 头文件 my_sql.h ...
随机推荐
- 采用Unity快速开发高质量游戏的若干优化建议
http://files.cnblogs.com/123ing/%E9%87%87%E7%94%A8Unity%E5%BF%AB%E9%80%9F%E5%BC%80%E5%8F%91%E9%AB%98 ...
- 代码规范和常用的js插件以及测试工具
1.代码规范 .model层 1.1.1database file_proerty 1.1.2java fileProperty. 1.2.字段要有空指针 1.3.不创建爱数据库外键约束 1.4.已知 ...
- SQL注入--宽字节注入
PHP测试代码: <?php // 面向对象写法 $id=addslashes($_GET[‘id’]); //获取id并转义预定义字符 // /$id=$_GET[‘id’]; $mysqli ...
- Mathematica 中 Minimize函数无法找到全局最小值时的解决方法
一直使用Minimize来找到指定约束下的函数的最小值,最近发现在一个非线性函数中使用Minimize无法提供一个"全局"最小值(使用Mathematica只是用来验证算法的,所以 ...
- Eclipse 一直提示 loading descriptor for 的解决方法(转)
启动eclipse之后,进行相关操作时,弹出界面,提示:loading descriptor for xxx 解决方法: 在Eclipse左侧的Project Explorer 最右上角有一个小钮,鼠 ...
- 【转】Solr安全设置——对外禁用管理后台
本文转自:http://www.devnote.cn/article/94.html 测试于:Solr 4.5.1, Jdk 1.6.0_45, Tomcat 6.0.37 | CentOS 5.7 ...
- Heap:左式堆的应用例(任意序列变单调性最小价值)
首先来说一下什么是左式堆: A:左式堆是专门用来解优先队列合并的麻烦(任意二叉堆的合并都必须重新合并,O(N)的时间). 左式堆的性质: 1.定义零路经长:节点从没有两个两个儿子节点的路经长,把NUL ...
- poj 3750 小孩报数问题 解题报告
题目链接:http://poj.org/problem?id=3750 约瑟夫问题,直接模拟即可. #include <iostream> #include <string> ...
- android 输入法出现挤压屏幕、android输入键盘覆盖了屏幕控件的解决办法
如果希望输入法键盘弹出时不自动向上挤压activity,在Manifest清单文件中对应的activty中设置属性android:windowSoftInputMode="adjustPan ...
- PW试验-----verilog
PWM,脉冲宽度调制.顾名思义,是通过调制脉冲的宽度,即占空比,来实现的.可是使占空比逐渐由最小增加到最大,也可以使占空比由最大减少到最小来实现不同的现象.若用LED灯来显示现象,则可以称作:LED呼 ...