OKHttp 请求库

来源:互联网 发布:淘宝买家自动评价软件 编辑:程序博客网 时间:2024/06/06 03:47

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;        }    }}
0 0
原创粉丝点击