volley+okhttp封装,一行代码就可访问网络

volley+okhttp封装,一行代码就可访问网络

前言:

我写这个可能不会彻底的教会你去怎么封装一个网络框架,个人目的在于让你不须要你本身封装就能够访问网络,或者说互相学习也能够,我只是想让你大概的了解下个人思路,最主要的就是教你如何使用它,而且将它应用在本身的项目中。由于如今的volley很火,并且okhttp也很火,这两者结合很是适合网络请求,具体有什么好处,你们能够自行百度,这里就不啰嗦了。java

简介

支持post,get请求,上传单个文件,上传多个文件,表单提交android

如何一行代码就能够访问网络

1,访问网络带参数post请求

String url = "http://dev.bodyplus.cc:8088/api/users?do=smsCode"; //参数 Map<String, String> params = new HashMap<>(); params.put("smsType", "1"); params.put("smsPhone", "18219200511"); params.put("type", "2"); //最主要的就是这一行 NetworkUtils.getInstance().sendPostRequest(url, params, new RequestCallback() { @Override public void onSuccess(Object object) { Log.d("1008611", object.toString()); data.setText(object.toString()); } @Override public void onFail(String string) { Log.d("1008611", string); data.setText(string); }

这须要调用上面这个方法就能够访问网络了,是否是很简单git

2,上传一个带参数的文件

//上传地址 String url = ""; //参数 Map<String, String> params = new HashMap<>(); params.put("key", "value"); String path = ""; //须要上传的文件 File file = new File(path); NetworkUtils.getInstance().uploadFile(url, params, "file", file, new RequestCallback() { @Override public void onSuccess(Object object) { } @Override public void onFail(String string) { } });

封装大体思路

从上面的方法能够看出,入口是NetworkUtils这个类,这个类里的方法github

/** * 支持post 带参数的请求 * * @param url 访问的地址 * @param params 访问须要加的参数 * @param callback 访问的回调 */ public void sendPostRequest(String url, Map<String, String> params, final RequestCallback callback) { if (UiUtils.hasNetwork()) { CustomRequest customRequest = new RequestBuilder().url(url).params(params).post().succesListener(new Response.Listener() { @Override public void onResponse(Object response) { try { JSONObject jsonObject = new JSONObject(response.toString()); String msg = getMsg(jsonObject); if (validationStatusCode(jsonObject)) { callback.onSuccess(response); } else { callback.onFail(msg); } } catch (JSONException e) { e.printStackTrace(); callback.onFail("服务器异常"); } } }).errorListener(new Response.ErrorListener() { @Override public void onErrorResponse(VolleyError error) { if (!TextUtils.isEmpty(error.getMessage())) { callback.onFail(error.getMessage()); } else { callback.onFail("服务器异常"); } } }).build(); HttpClientRequest.getInstance().addRequest(customRequest); } else { callback.onFail("网络掉线了!"); } }

HttpClientRequest.getInstance().addRequest(customRequest);这行代码执行后就能够访问网络了,是的,里面的参数是一个request,这个request是自定义的,CustomRequest类里能够添加http的头,在这里能够添加cookie,或者存储cookie,具体能够下载Demo查看,还有一个类就是HttpClientRequest,这个类的方法:apache

public RequestQueue getRequestQueue() { if (mRequestQueue == null) { mRequestQueue = Volley.newRequestQueue(UiUtils.getContext(), new OkHttpStack()); } return mRequestQueue; }

固然不是这一个方法,还有其余的方法,在这个方法里使用了OkHttpStack, 
由于最终我要使用的是OkHttpClient,因此在这个类里,使用了OkHttpClient,能够在Demo查看。json

如何使用

至于实现的思路,可能这样不会讲的很清楚,可是我们都是看代码都能懂得人就不用讲的太多了,最主要的仍是如何使用啦api

很简单,按照我说的作,你就可使用啦,服务器

netutils的包下就是这个访问网络的全部类,因此直接复制到你的项目里markdown

这里写图片描述

还有一个就是libs下有两个jar包,也复制到你的项目里cookie

这里写图片描述

另一个就是gradle文件

dependencies {
    compile 'eu.the4thfloor.volley:com.android.volley:2015.05.28'
    compile 'com.squareup.okhttp3:okhttp:3.4.0-RC1'
    compile 'com.google.code.gson:gson:2.7'
    compile files('libs/org.apache.http.legacy.jar')
    compile files('libs/httpmime-4.2.5.jar')
}

作完了这些,就算移植成功了

最后的话

不能光会使用,还得了解下他的原理,不在这介绍原理了就,网上有不少人讲的都很明白,也能够看看源码,这个封装就是仿照源码完成的。

Demo地址: https://github.com/FussenYu/HttpDemo

点击下载Demo

相关文章
相关标签/搜索