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

相關文章
相關標籤/搜索