OKHttp 请求库
2016-05-25 16:31
447 查看
Hongyang详解:http://blog.csdn.net/lmj623565791/article/details/47911083
大牛已经封装了一个很棒的工具类了,有兴趣可以去学习,但是这里还是贴上自己封装的(^~^):
应用:
大牛已经封装了一个很棒的工具类了,有兴趣可以去学习,但是这里还是贴上自己封装的(^~^):
import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.util.HashMap; import java.util.Iterator; import java.util.Map; import java.util.Map.Entry; import java.util.concurrent.TimeUnit; import com.example.mytoolutils.utils.LogUtils; import com.squareup.okhttp.Callback; import com.squareup.okhttp.FormEncodingBuilder; import com.squareup.okhttp.MediaType; import com.squareup.okhttp.OkHttpClient; import com.squareup.okhttp.Request; import com.squareup.okhttp.RequestBody; import com.squareup.okhttp.Response; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.os.Environment; /** * okhttp 封装工具类<BR/> * okHttp: OKHttp是Android版Http客户端。非常高效,支持SPDY、连接池、GZIP和 HTTP 缓存。 * 默认情况下,OKHttp会自动处理常见的网络问题,像二次连接、SSL的握手问题。 * 如果你的应用程序中集成了OKHttp,Retrofit默认会使用OKHttp处理其他网络层请求。 An HTTP & SPDY client for Android and Java applications 从Android4.4开始HttpURLConnection的底层实现采用的是okHttp. 使用要求:对于Android:2.3以上,对于Java:java7以上 两个模块: okhttp-urlconnection实现.HttpURLConnection API; okhttp-apache实现Apache HttpClient API. 依赖:okio(https://github.com/square/okio): Okio, which OkHttp uses for fast I/O and resizable buffers. */ public class OkHttpUtils { private static OkHttpUtils instance; private static OkHttpClient okHttpClient; /** * 异步请求 */ public static String OKHTTP_UTILS_REQUEST_ASYNC="OkHttpUtils_OkHttp_Async_Method"; /** * 同步请求 */ public static String OKHTTP_UTILS_REQUEST_UI="OkHttpUtils_OkHttp_UI_Method"; /** * string 类型 */ public static String OKHTTP_UTILS_REQUEST_STRING="OkHttpUtils_OkHttp_String_Method"; /** * json类型 */ public static String OKHTTP_UTILS_REQUEST_JSON="OkHttpUtils_OkHttp_Json_Method"; /** * file类型 */ public static String OKHTTP_UTILS_REQUEST_FILE="OkHttpUtils_OkHttp_File_Method"; /** * 返回bitmap类型 */ public static String OKHTTP_UTILS_REQUEST_RESULT_BITMAP="OkHttpUtils_OkHttp_Result_Bitmap_Type"; /** * 返回file类型 */ public static String OKHTTP_UTILS_REQUEST_RESULT_FILE="OkHttpUtils_OkHttp_Result_File_Type"; /** * 返回string类型 */ public static String OKHTTP_UTILS_REQUEST_RESULT_STRING="OkHttpUtils_OkHttp_Result_String_Type"; /** * 返回未知类型 */ public static String OKHTTP_UTILS_REQUEST_RESULT_UNKNOWN="OkHttpUtils_OkHttp_Result_Unknown_Type"; public static OkHttpUtils getInstance(){ if(instance==null){ synchronized (OkHttpUtils.class) { if(instance==null){ instance=new OkHttpUtils(); } } } if(okHttpClient==null){ okHttpClient=new OkHttpClient(); okHttpClient.setConnectTimeout(10, TimeUnit.SECONDS);//联网超时 okHttpClient.setWriteTimeout(10, TimeUnit.SECONDS);//写入超时 okHttpClient.setReadTimeout(30, TimeUnit.SECONDS);//读取超时 } return instance; } /** * 请求处理接口 */ public interface OkHttpUtilsCallback{ void Success(Object arg0); void Failure(Object...objects); } /** * 同步或者异步get请求 * @param path * @param callback * @param method * OKHTTP_UTILS_REQUEST_ASYNC 异步 OKHTTP_UTILS_REQUEST_UI 同步 * @param resultType 返回结果类型 */ public void StartAsyncOrUIGetRequest(String path,final OkHttpUtilsCallback callback,String method,String resultType){ Request request=new Request.Builder().url(path).build(); if(method==null||method.equals(OKHTTP_UTILS_REQUEST_ASYNC)){ okHttpClient.newCall(request).enqueue(new MCallback(callback,resultType).okCallback);//异步 }else{ try { Response response=okHttpClient.newCall(request).execute(); //同步 DisposeResponse(callback, response,resultType); } catch (IOException e) { e.printStackTrace(); } } } /** * 同步或者异步post请求 提交键值对 * @param path * @param map post参数 null则return * @param callback * @param method * OKHTTP_UTILS_REQUEST_ASYNC 异步 OKHTTP_UTILS_REQUEST_UI 同步 * @param resultType 返回结果类型 */ public void StartAsyncOrUIPostRequestUploadMap(String path,HashMap<String,Object>map,OkHttpUtilsCallback callback,String method,String resultType){ Request request=null; if(map!=null){ FormEncodingBuilder fBody=new FormEncodingBuilder(); Iterator iterator=map.entrySet().iterator(); while(iterator.hasNext()){ Map.Entry entry=(Entry) iterator.next(); fBody.add((String)entry.getKey(), (String) entry.getValue()); } RequestBody body=fBody.build(); request=new Request.Builder().url(path).post(body).build(); }else{ return; } if(method==null||method.equals(OKHTTP_UTILS_REQUEST_ASYNC)){ okHttpClient.newCall(request).enqueue(new MCallback(callback,resultType).okCallback); }else{ try { Response response=okHttpClient.newCall(request).execute(); DisposeResponse(callback, response,resultType); } catch (IOException e) { e.printStackTrace(); } } } private static final MediaType JSON=MediaType.parse("application/json; charset=utf-8"); private static final MediaType MEDIA_TYPE_MARKDOWN = MediaType.parse("text/x-markdown; charset=utf-8"); /** * 同步或者异步post方式提交数据(json file string ) * @param path URL * @param type <P> * OKHTTP_UTILS_REQUEST_JSON <P> * OKHTTP_UTILS_REQUEST_STRING<P> * OKHTTP_UTILS_REQUEST_FILE<P> * @param string 需要提交的内容 file时为文件地址 * @param callback * @param method OKHTTP_UTILS_REQUEST_ASYNC 异步 OKHTTP_UTILS_REQUEST_UI 同步 * @param resultType 返回结果类型 */ public void StartAsyncOrUIPostRequestUploadObject(String path,String type,String string,OkHttpUtilsCallback callback,String method,String resultType){ Request request=null; if(string!=null){ RequestBody body=null; if(type.equals(OKHTTP_UTILS_REQUEST_JSON)){ body=RequestBody.create(JSON, string); }else if(type.equals(OKHTTP_UTILS_REQUEST_STRING)){ body=RequestBody.create(MEDIA_TYPE_MARKDOWN, string); }else if(type.equals(OKHTTP_UTILS_REQUEST_FILE)){ File file=new File(string); body=RequestBody.create(MEDIA_TYPE_MARKDOWN, file); } request=new Request.Builder().url(path).post(body).build(); }else{ return; } if(method==null||method.equals(OKHTTP_UTILS_REQUEST_ASYNC)){ okHttpClient.newCall(request).enqueue(new MCallback(callback,resultType).okCallback); }else{ try { Response response=okHttpClient.newCall(request).execute(); DisposeResponse(callback, response,resultType); } catch (IOException e) { e.printStackTrace(); } } } /** * 处理请求结果 * @param callback * @param response * @param resultType 返回类型 */ private void DisposeResponse(OkHttpUtilsCallback callback,Response response, String resultType){ if(response.isSuccessful()){ DealWith(callback, response, resultType); }else{ callback.Failure(); } } @SuppressWarnings("resource") private void DealWith(OkHttpUtilsCallback callback, Response response, String resultType) { try { if(resultType.equals(OKHTTP_UTILS_REQUEST_RESULT_BITMAP)){ InputStream inputStream=response.body().byteStream(); BitmapFactory.Options options=new BitmapFactory.Options(); options.inJustDecodeBounds=false; inputStream.reset(); Bitmap bitmap=BitmapFactory.decodeStream(inputStream,null,options); callback.Success(bitmap); inputStream.close(); }else if(resultType.equals(OKHTTP_UTILS_REQUEST_RESULT_STRING)){ callback.Success(response.body().toString()); }else if(resultType.equals(OKHTTP_UTILS_REQUEST_RESULT_FILE)){ byte[]bs=new byte[1024]; FileOutputStream foStream=null; InputStream iStream= response.body().byteStream(); File file=new File(Environment.getExternalStorageDirectory(),"okhttputilsdownload"); if(file.exists()){ file.delete(); file.createNewFile(); } foStream=new FileOutputStream(file); int len=0; while((len=iStream.read(bs))!=-1){ foStream.write(bs, 0, len); } foStream.flush(); //返回文件地址 callback.Success(Environment.getExternalStorageDirectory()+"okhttputilsdownload"); }else if(resultType.equals(OKHTTP_UTILS_REQUEST_RESULT_UNKNOWN)){ callback.Success(response); } } catch (IOException e) { e.printStackTrace(); } } //-------------------------------------------- private class MCallback{ private OkHttpUtilsCallback callback; private String resultType; @SuppressWarnings("unused") public MCallback(OkHttpUtilsCallback callback,String resultType) { this.callback=callback; this.resultType=resultType; } Callback okCallback=new Callback() { @Override public void onResponse(Response response) throws IOException { DealWith(callback, response, resultType); } @Override public void onFailure(Request arg0, IOException arg1) { callback.Failure(); } }; } }
应用:
import java.io.IOException; import com.example.mytoolutils.MyAppliation; import com.example.mytoolutils.R; import com.example.mytoolutils.utils.LogUtils; import com.example.mytoolutils.utils.framework.OkHttpUtils; import com.example.mytoolutils.utils.framework.OkHttpUtils.OkHttpUtilsCallback; import com.squareup.okhttp.Callback; import com.squareup.okhttp.OkHttpClient; import com.squareup.okhttp.Request; import com.squareup.okhttp.Response; import android.app.Activity; import android.graphics.Bitmap; import android.os.Bundle; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; import android.widget.ImageView; import android.widget.TextView; public class OKHttpActivity extends Activity implements OnClickListener { private TextView okhttptext; private ImageView okhttpbitmap; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_okhttp); okhttptext=(TextView) findViewById(R.id.okhttptext); okhttpbitmap=(ImageView) findViewById(R.id.okhttpbitmap); findViewById(R.id.okhttp).setOnClickListener(this); init(); } private void init() { OkHttpClient client=new OkHttpClient(); Request request= new Request.Builder().url("http://blog.csdn.net/lmj623565791/article/details/47911083").build(); client.newCall(request).enqueue(new Callback() { @Override public void onResponse(Response arg0) throws IOException { } @Override public void onFailure(Request arg0, IOException arg1) { // TODO Auto-generated method stub } }); } private void initview() { OkHttpUtils.getInstance().StartAsyncOrUIGetRequest ("http://www.tudou.com/albumplay/VBRDC1K398w/i6ZO0tnJcVc.html?FR=LIAN", callback, OkHttpUtils.OKHTTP_UTILS_REQUEST_ASYNC, OkHttpUtils.OKHTTP_UTILS_REQUEST_RESULT_UNKNOWN); } OkHttpUtilsCallback callback=new OkHttpUtilsCallback() { @Override public void Success(final Object arg0) { runOnUiThread(new Runnable() { public void run() { if(arg0 instanceof Bitmap){ okhttpbitmap.setImageBitmap((Bitmap) arg0); }else if(arg0 instanceof String){ okhttptext.setText(arg0.toString()); } } }); } @Override public void Failure(Object... objects) { } }; @Override public void onClick(View v) { switch (v.getId()) { case R.id.okhttp: new Thread(new Runnable() { public void run() { initview(); } }).start(); break; } } }
相关文章推荐
- okhttpUtils 框架的理解
- VirtualBox ubuntu server内外网皆通的网络连接设置
- jpeg图片接收显示测试上位机[串口 网络 摄像头上位机软件 开源]
- TCP协议三次握手、四次挥手
- vnc使用
- Volley学习笔记(二)
- 关于从浏览器到数据库之间的网络连接
- DNS原理及其解析过程剖析
- Http接口获取数据
- android 使用广播监听网络状态变化
- HTTP错误
- wireshark抓包图解 TCP三次握手/四次挥手详解
- 常见的端口速查
- RestEasy测试Http-API
- 谷歌插件DHC测试HTTP接口
- android网络打印 生成pdf
- linux网络监控工具
- Google深度学习笔记 TensorFlow实现与优化深度神经网络
- 如何学习网络协议(学习笔记)
- 一种融合异构信息网络和评分矩阵的推荐新算法