Android OkHttp的使用心得
前言
由于Google在Android 6.0版本刪除了HttpClient相關API,在網絡訪問這一塊,OKHttp也是流行起來,趁著最近有空,參考個各路大神關于OKHttp的文章,總結一下其使用心得。
OKHttp依賴包鏈接(https://search.maven.org/remote_content?g=com.squareup.okhttp&a=okhttp&v=LATEST)點擊下載
OkHttp內部依賴包okio鏈接(https://search.maven.org/remote_content?g=com.squareup.okio&a=okio&v=LATEST)點擊下載
二、Http Get請求
public void httpGet() {// 創建okHttpClient對象OkHttpClient mOkHttpClient = new OkHttpClient();// 創建一個Requestfinal Request request = new Request.Builder().url("http://blog.csdn.net/android_mnbvcxz").get().build();// new callCall call = mOkHttpClient.newCall(request);// 請求加入調度call.enqueue(new Callback() {@Overridepublic void onFailure(Request request, IOException e) {}@Overridepublic void onResponse(final Response response) throws IOException {// String htmlStr = response.body().string();}});}
以上就是發送一個get請求的步驟:
1.先構造一個Request對象,參數至少有url,也可以通過Request.Builder設置更多的參數:比如header、mehod等;
2.通過request的對象去構造得到一個Call對象,就是請求封裝成了任務,擁有execute()和cancel()等方法;
3.最后以異步的方式去執行請求,所以調用call.enqueue,將call加入調度隊列,然后等待任務執行完成,即可在CallBack得到結果。
注意
1.onResponse回調的參數是response,一般情況下,比如我們希望獲得返回的字符串,可以通過response.body().string()獲取;如果希望獲得返回的二進制字節數組,則調用response.body().bytes();如果你想拿到返回的inputStream,則調用response.body().byteStream();
2.這里是異步的方式去執行,當然也支持阻塞的方式,上面我們也說了Call有一個execute()方法,你也可以直接調用call.execute()通過返回一個Response。
二、Http Post攜帶參數請求
//post提交鍵值對public void httpPost() {// 創建okHttpClient對象OkHttpClient mOkHttpClient = new OkHttpClient();FormEncodingBuilder builder = new FormEncodingBuilder();// 構造RequestBodyRequestBody requestBody = builder.add("username", "用戶名").add("password", "密碼").build();// 創建一個RequestRequest request = new Request.Builder().url("http://blog.csdn.net/android_mnbvcxz").post(requestBody).build();// 請求加入調度mOkHttpClient.newCall(request).enqueue(new Callback() {@Overridepublic void onFailure(Request request, IOException e) {}@Overridepublic void onResponse(final Response response) throws IOException {// String htmlStr = response.body().string();}});}//post提交字符串public void httpPostString() {// 創建okHttpClient對象OkHttpClient mOkHttpClient = new OkHttpClient();// 構造RequestBodyRequestBody requestBody = RequestBody.create(MediaType.parse("text/plain;chaset=utf-8"),"'username':'用戶名','passwored':'密碼'");// 創建一個RequestRequest request = new Request.Builder().url("http://blog.csdn.net/android_mnbvcxz").post(requestBody).build();// 請求加入調度mOkHttpClient.newCall(request).enqueue(new Callback() {@Overridepublic void onFailure(Request request, IOException e) {}@Overridepublic void onResponse(final Response response) throws IOException {// String htmlStr = response.body().string();}});}//post提交Filepublic void httpPostFile() {//1、 創建okHttpClient對象OkHttpClient mOkHttpClient = new OkHttpClient();//2、構造RequestBodyFile file = new File(Environment.getExternalStorageDirectory(),"banner.jpg");if (!file.exists()) {Log.e("error_tag", file.getAbsolutePath() + "not exist!");return;}//mime typeRequestBody fileBody=RequestBody.create(MediaType.parse("application/octet-stream"), file);//3、創建一個RequestRequest request = new Request.Builder().url("http://blog.csdn.net/android_mnbvcxz").post(fileBody).build();//4、請求加入調度mOkHttpClient.newCall(request).enqueue(new Callback() {@Overridepublic void onFailure(Request request, IOException e) {}@Overridepublic void onResponse(final Response response) throws IOException {// String htmlStr = response.body().string();}});}?這里的post請求攜帶參數,也僅僅是Request的構造的不同。
1、在httpPost()方法中,參數是包含在請求體中的;所以我們通過FormEncodingBuilder。添加多個String鍵值對,然后去構造RequestBody,最后完成我們Request的構造。
2、在httpPostString()的方法里參數是一個字符串,所以不需要FormEncodingBuilder這個構造者模式,只需要使用Requestbody的靜態方法create即可。
3、在httpPostFile()方法中只是提交了一個文件,所以和httpPostString()一樣,使用使用Requestbody的靜態方法create
注意
在使用Requestbody的靜態方法create時中的若不清楚文件類型的MediaType,可以查看這篇文章http://blog.csdn.net/android_mnbvcxz/article/details/65441571點擊打開鏈接
總結
以上是生活随笔為你收集整理的Android OkHttp的使用心得的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Android客户端与服务器端交互,如何
- 下一篇: The Complete List of