Android OKHTTP

来源:互联网 发布:玖富理财 知乎 编辑:程序博客网 时间:2024/05/16 15:24

OKHTTP官网:http://square.github.io/okhttp/

代码示例:

HTTP GET

        final OkHttpClient client = new OkHttpClient();   
        new Thread(new Runnable(){
            @Override
            public void run() {
                // TODO Auto-generated method stub
                Request request = new Request.Builder().url("http://publicobject.com/helloworld.txt").build();
                Response response;
                try {
                    response = client.newCall(request).execute();
                    if(response.isSuccessful()){
                        showInfoStr = response.body().string();
                    }else{
                        Log.d("MainActivity:httpGetOfOkHttp:Unexpected code", "------>" + response.toString());
                    }              
                } catch (IOException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                    Log.d("MainActivity:httpGetOfOkHttp", "------>" + e.toString());
                }    
            }}).start();

其中,Request是OkHttp中访问的请求,Builder是辅助类,Response即OkHttp中的响应。

HTTP POST

public static final MediaType JSON = MediaType.parse("application/json; charset=utf-8");

OkHttpClient client = new OkHttpClient();

String post(String url, String json) throws IOException { 

            RequestBody body = RequestBody.create(JSON, json);

            Request request = new Request.Builder() .url(url) .post(body) .build(); 

            Response response = client.newCall(request).execute();  

            if (response.isSuccessful()) {    

                         return response.body().string();  

                } else {  

                        throw new IOException("Unexpected code " + response);  

                }

}

其中,post方式提交Json使用Request的post方法来提交请求体RequestBody

POST提交键值对

OkHttpClient client = new OkHttpClient();

String post(String url, String json) throws IOException {

                   RequestBody formBody = new FormEncodingBuilder()

                          .add("platform", "android")  

                          .add("name", "bug") 

                          .add("subject", "XXXXXXXXXXXXXXX") 

                          .build(); 

                  Request request = new Request.Builder()                

                       .url(url)              

                       .post(formBody )                

                       .build();  

                 Response response = client.newCall(request).execute();  

                if (response.isSuccessful()) {      

                              return response.body().string();  

                  } else {      

                            throw new IOException("Unexpected code " + response);  

                  }

}

OkHttp官方文档并不建议我们创建多个OkHttpClient,因此我们采用单例模式。OKHTTP工具类如下:

import java.io.IOException;

import java.util.List;

import java.util.concurrent.TimeUnit;

import org.apache.http.client.utils.URLEncodedUtils;

import org.apache.http.message.BasicNameValuePair;

import cn.wiz.sdk.constant.WizConstant;

import com.squareup.okhttp.Callback;

import com.squareup.okhttp.OkHttpClient;

import com.squareup.okhttp.Request;

import com.squareup.okhttp.Response; public class OkHttpUtil {  

private static final OkHttpClient mOkHttpClient = new OkHttpClient();  

static{    

                 mOkHttpClient.setConnectTimeout(30, TimeUnit.SECONDS);  

                } 

 /**   

该不会开启异步线程。  

 * @param request   

* @return   

* @throws IOException   

*/  

public static Response execute(Request request) throws IOException{   

 return mOkHttpClient.newCall(request).execute();  

}  

/**   

开启异步线程访问网络   

* @param request   

* @param responseCallback   

*/  

public static void enqueue(Request request, Callback responseCallback)

{    

mOkHttpClient.newCall(request).enqueue(responseCallback);  

 /**   

开启异步线程访问网络且不在意返回结果(实现空callback)   

* @param request   

*/  

public static void enqueue(Request request){

    mOkHttpClient.newCall(request).enqueue(new Callback() { 

           @Override     

           public void onResponse(Response arg0) throws IOException {            

            }            

          @Override     

           public void onFailure(Request arg0, IOException arg1) {              

           }    

});  

}  

public static String getStringFromServer(String url) throws IOException{   

             Request request = new Request.Builder().url(url).build();    

            Response response = execute(request);    

          if (response.isSuccessful()) {     

                         String responseUrl = response.body().string();     

                         return responseUrl;   

             } else {    

                       throw new IOException("Unexpected code " + response);   

            }  

}  

private static final String CHARSET_NAME = "UTF-8"; 

 /**   

这里使用了HttpClinetAPI。只是为了方便   

* @param params   

* @return   

*/  

public static String formatParams(List<BasicNameValuePair> params){    

             return URLEncodedUtils.format(params, CHARSET_NAME); 

 }  

/**   

HttpGet 的 url 方便的添加多个name value 参数。   

* @param url   

* @param params   

* @return   

*/  

public static String attachHttpGetParams(String url, List<BasicNameValuePair> params){   

               return url + "?" + formatParams(params);  

 /**   

HttpGet 的 url 方便的添加1name value 参数。   

* @param url   

* @param name   

* @param value   

* @return   

*/  

public static String attachHttpGetParam(String url, String name, String value){    

             return url + "?" + name + "=" + value; 

 }

}

高级进阶篇:http://www.cnblogs.com/ct2011/p/3997368.html


0 0