Android OKHTTP的单例和再封装的实例
/**
* Created by zm on 16-2-1
* okhttp的再封装,对于2.x版本,3.x版本将原有对okhttpclient配置
* 改成了builder模式配
* 置,对于超时、代理、dns,okhttp已经做好了配置,
* 若不需要特殊配置,可以跳过
*/
public class OkHttpUtil
{
private static OkHttpClient singleton;
//非常有必要,要不此类还是可以被new,但是无法避免反射,好恶心
private OkHttpUtil(){
}
public static OkHttpClient getInstance() {
if (singleton == null)
{
synchronized (OkHttpUtil.class)
{
if (singleton == null)
{
singleton = new OkHttpClient();
}
}
}
return singleton;
}
}
之前在看okhttp源码的时候,发现square没有对okhttpclient进行单例,网上也没找到合适的解释,以下是自己的猜测
优点:使用单例模式,避免了多次创建所产生的垃圾
缺点:对于一些特殊需求的代码进行一些灵活的配置,单例模式难以实现
总结:做为优秀的开源框架,square出发点是让用户更好更灵活的使用和扩展,从用户角度来说,对于不需要多次配置的项目,可以手动写一个单例模式,便于内存的高效利用
/**
* okhttp再次封装
* Created by zm on 16-2-1
* update by zm on 16-3-19 增加Builder,方便以后内容或者字段的扩展
*
*/
public class HttpTools
{
private Context context;
private final RequestParams req;
private final Handler handler;
public HttpTools(Builder builder)
{
// TODO Auto-generated constructor stub
context = builder.context;
req = builder.req;
handler = builder.handler;
}
public static class Builder
{
private final RequestParams req;
private final Context context;
private final Handler handler;
public Builder(RequestParams req, Context mContext, Handler handler)
{
// TODO Auto-generated constructor stub
this.req = req;
this.context = mContext;
this.handler = handler;
}
public HttpTools build() {
return new HttpTools(this);
}
}
public void requestBuilder() {
// TODO Auto-generated method stub
if(req==null||context==null||handler==null){
throw new NullPointerException("NullPointerException");
}
requestGet(req, context, handler);
}
private static void parse(Call call, final Handler handler,
final RequestParams req) {
// 请求加入调度
call.enqueue(new Callback()
{
@Override
public void onResponse(Call call, Response response)
throws IOException {
// TODO Auto-generated method stub
String result = response.body().string();
if (result != null)
{
Message message = Message.obtain();
message.obj = result;
message.what = req.getSuccessMsgWhat();
handler.sendMessage(message);
}
}
@Override
public void onFailure(Call call, IOException e) {
// TODO Auto-generated method stub
handler.sendEmptyMessage(req.getFailMsgWhat());
}
});
}
/**
*
* @param req
* @param context
* @param handler
*
* get请求
*/
public static void requestGet(final RequestParams req,
final Context context, final Handler handler) {
// 创建一个Request
final Request request = new Request.Builder().url(req.getRequestUrl()).build();
Call call = OkHttpUtil.getInstance().newCall(request);
parse(call, handler, req);
}
/**
* post请求
*/
public static void requestPost(final RequestParams req,
final Context context, final Handler handler) {
FormBody.Builder builder = new FormBody.Builder();
//此处是对RequestParams的遍历,RequestParams类省略
for (Map.Entry<String, Object> mEntry : req.getParamEntry())
{
String mEntryKey = mEntry.getKey();
Object mEntryValue = mEntry.getValue();
if (TextUtils.isEmpty(mEntryKey))
{
continue;
}
builder.add(mEntryKey, mEntryValue.toString());
}
RequestBody body = builder.build();
Request request = new Request.Builder().url(req.getUrl()).post(body).build();
Call call = OkHttpUtil.getInstance().newCall(request);
parse(call, handler, req);
}
/**
* 数据请求的集中管理,方便以后一键替换,从get到post
*/
public static void request(RequestParams req, Context mContext,
Handler handler) {
// TODO Auto-generated method stub
requestGet(req, mContext, handler);
}
}
最后再奉献上一个封装类
/**
*
* Created by zm on 16-2-1
* 基于Gson的json转model封装类
*
*/
public class JsonToModel
{
private static String info = "info";
public static String getInfo()
{
return info;
}
public static void setInfo(String info)
{
JsonToModel.info = info;
}
/**
*
* @param msg
* @param t
* model类
* @param model
* model对象
* @return
*/
public static <T> List<T> getJsonArrayToModel(Message msg, Class<T> t,
T model) {
// TODO Auto-generated method stub
List<T> list = new ArrayList<T>();
try {
JSONObject json = new JSONObject(msg.obj.toString());
for (int i = 0; i < json.getJSONArray(getInfo()).length(); i++) {
model = GsonHelper.toType(json.getJSONArray(getInfo()).get(i).toString(), t);
list.add(model);
}
return list;
} catch (Exception e) {
// TODO Auto-generated catch block
Log.e("getJsonArrayToModel", "error");
e.printStackTrace();
}
return null;
}
}
json转model的这个类中,当时没考虑到过多性能的问题,在此类中即使用了org.json.JSONObject也使用了gson,此处还可以做出相应的优化
如有疑问请留言或者到本站社区交流讨论,感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!
# Android
# OKHTTP的单例
# OKHTTP的单例及封装
# Android使用OKHttp库实现视频文件的上传到服务器功能
# Android Okhttp请求查询购物车的实例代码
# Android 封装Okhttp+Retrofit+RxJava
# 外加拦截器实例
# android 开发中使用okhttp上传文件到服务器
# Android okhttp3.0忽略https证书的方法
# Android使用OkHttp请求自签名的https网站的示例
# Android中okhttp3使用详解
# android通过okhttpClient下载网页内容的实例代码
# Android开发之OkHttpUtils的具体使用方法
# Android中实现OkHttp上传文件到服务器并带进度
# android中实现OkHttp下载文件并带进度条
# Android使用OKHTTP解析JSON数据的实例代码
# Android使用OkHttp上传图片的实例代码
# Android OkHttp 结合php 多图片上传实例
# 详解Android中OkHttp3的例子和在子线程更新UI线程的方法
# android Retrofit2+okHttp3使用总结
# Android OkHttp Post上传文件并且携带参数实例详解
# Android OkHttp基本使用详解
# 用了
# 自己的
# 类中
# 还可以
# 也没
# 在此
# 不需要
# 如有
# 遍历
# 希望能
# 此类
# 考虑到
# 有必要
# 谢谢大家
# 若不
# 也使
# 创建一个
# 一键
# 跳过
# 开源
相关文章:
实现点击下箭头变上箭头来回切换的两种方法【推荐】
网站广告牌制作方法,街上的广告牌,横幅,用PS还是其他软件做的?
PHP正则匹配日期和时间(时间戳转换)的实例代码
在线流程图制作网站手机版,谁能推荐几个好的CG原画资源网站么?
如何选择可靠的免备案建站服务器?
建站主机如何安装配置?新手必看操作指南
成都网站制作价格表,现在成都广电的单独网络宽带有多少的,资费是什么情况呢?
英语简历制作免费网站推荐,如何将简历翻译成英文?
建站主机CVM配置优化、SEO策略与性能提升指南
,网页ppt怎么弄成自己的ppt?
宝塔建站助手安装配置与建站模板使用全流程解析
南平网站制作公司,2025年南平市事业单位报名时间?
长沙做网站要多少钱,长沙国安网络怎么样?
长春网站建设制作公司,长春的网络公司怎么样主要是能做网站的?
如何在万网主机上快速搭建网站?
如何在局域网内绑定自建网站域名?
如何优化Golang Web性能_Golang HTTP服务器性能提升方法
如何在云服务器上快速搭建个人网站?
如何在搬瓦工VPS快速搭建网站?
贸易公司网站制作流程,出口贸易网站设计怎么做?
C#如何在一个XML文件中查找并替换文本内容
免费公司网站制作软件,如何申请免费主页空间做自己的网站?
广州顶尖建站服务:企业官网建设与SEO优化一体化方案
建站主机是否属于云主机类型?
Python lxml的etree和ElementTree有什么区别
视频网站app制作软件,有什么好的视频聊天网站或者软件?
制作网站公司那家好,网络公司是做什么的?
如何通过VPS建站无需域名直接访问?
名字制作网站免费,所有小说网站的名字?
c++如何打印函数堆栈信息_c++ backtrace函数与符号名解析【方法】
如何用wdcp快速搭建高效网站?
建站之星在线版空间:自助建站+智能模板一键生成方案
在线制作视频网站免费,都有哪些好的动漫网站?
广平建站公司哪家专业可靠?如何选择?
网页设计网站制作软件,microsoft office哪个可以创建网页?
较简单的网站制作软件有哪些,手机版网页制作用什么软件?
建站VPS能否同时实现高效与安全翻墙?
如何选择高性价比服务器搭建个人网站?
网站视频怎么制作,哪个网站可以免费收看好莱坞经典大片?
ui设计制作网站有哪些,手机UI设计网址吗?
宁波免费建站如何选择可靠模板与平台?
韩国网站服务器搭建指南:VPS选购、域名解析与DNS配置推荐
手机钓鱼网站怎么制作视频,怎样拦截钓鱼网站。怎么办?
如何通过服务器快速搭建网站?完整步骤解析
合肥做个网站多少钱,合肥本地有没有比较靠谱的交友平台?
网站制作公司哪里好做,成都网站制作公司哪家做得比较好,更正规?
专业网站制作企业网站,如何制作一个企业网站,建设网站的基本步骤有哪些?
jQuery 常见小例汇总
专业型网站制作公司有哪些,我设计专业的,谁给推荐几个设计师兼职类的网站?
如何通过二级域名建站提升品牌影响力?
*请认真填写需求信息,我们会在24小时内与您取得联系。