您的位置:首页 > 理论基础 > 计算机网络

Android OKHTTP

2015-11-04 11:52 531 查看
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";

/**

* 这里使用了HttpClinet的API。只是为了方便

* @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 方便的添加1个name 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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: