volley+okhttp封裝,一行代碼就可訪問網絡


volley+okhttp封裝,一行代碼就可訪問網絡

前言:

我寫這個可能不會完全的教會你去怎么封裝一個網絡框架,我的目的在於讓你不需要你自己封裝就可以訪問網絡,或者說互相學習也可以,我只是想讓你大概的了解下我的思路,最主要的就是教你如何使用它,並且將它應用在自己的項目中。因為現在的volley很火,而且okhttp也很火,這二者結合非常適合網絡請求,具體有什么好處,大家可以自行百度,這里就不啰嗦了。

簡介

支持post,get請求,上傳單個文件,上傳多個文件,表單提交

如何一行代碼就可以訪問網絡

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); }

這需要調用上面這個方法就可以訪問網絡了,是不是很簡單

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這個類,這個類里的方法

        /** * 支持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,這個類的方法:

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

當然不是這一個方法,還有其他的方法,在這個方法里使用了OkHttpStack, 
因為最終我要使用的是OkHttpClient,所以在這個類里,使用了OkHttpClient,可以在Demo查看。

如何使用

至於實現的思路,可能這樣不會講的很清楚,但是咱們都是看代碼都能懂得人就不用講的太多了,最主要的還是如何使用啦

很簡單,按照我說的做,你就可以使用啦,

netutils的包下就是這個訪問網絡的所有類,所以直接復制到你的項目里

這里寫圖片描述

還有一個就是libs下有兩個jar包,也復制到你的項目里

這里寫圖片描述

另外一個就是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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM