1,实现效果
-
OkHttp 请求网络
2,实现逻辑
【1】单例创建对象
-
私有成员变量
private HttpHelper(){
//1.创建OkHttpClient对象
// .cache(new Cache(file,size))//设置数据缓存的
okhttp = new OkHttpClient.Builder()
.readTimeout(15, TimeUnit.SECONDS)
.writeTimeout(15, TimeUnit.SECONDS)
// .cache(new Cache(file,size))//设置数据缓存的
.build();
}
-
成员变量自己创建对象
private static HttpHelper mInstance = new HttpHelper();
对外暴露获取对象的方法
-
public static HttpHelper create(){ return mInstance; }
【2】执行get请求
-
创建HttpCallback 接口
public interface HttpCallback{
void onSuccess(String data);
void onFail(Exception e);
}
创建Request对象,获取call对象
/***
* 执行get请求
* @param url
* @param callback
*/
public void execGet(String url, HashMap<String,String> headers, final HttpCallback callback){
//2.创建请求对象Request
Request.Builder builder = new Request.Builder()
.url(url)
.get();//设置请求方式是get
//添加header
if(headers!=null && !headers.isEmpty()){
Iterator<Map.Entry<String, String>> iterator = headers.entrySet().iterator();
while(iterator.hasNext()){
Map.Entry<String, String> entry = iterator.next();
builder.addHeader(entry.getKey(), entry.getValue());
}
}
Request request = builder.build();
//3.执行请求
Call call = okhttp.newCall(request);
//执行请求,但是这个方式是同步请求的方式
// Response response = call.execute();
//执行异步请求的方式
call.enqueue(new Callback() {
@Override
public void onFailure(Call call, final IOException e) {
e.printStackTrace();
//因为在子线程不能更新UI 所以利用Handler调用方法
handler.post(new Runnable() {
@Override
public void run() {
if(callback!=null){
callback.onFail(e);
}
}
});
}
@Override
public void onResponse(Call call, Response response) throws IOException {
//获取http相应体数据
ResponseBody body = response.body();
//将响应体的数据转为string
final String string = body.string();
handler.post(new Runnable() {
@Override
public void run() {
//将数据传递给外界
if(callback!=null){
callback.onSuccess(string);
}
}
});
}
});
}
-
写一个不要字段的get请求
/**
* 执行get请求
* @param url
* @param callback
*/
public void execGet(String url, HttpCallback callback){
execGet(url,null,callback);
}
3,全部代码
public class HttpHelper {
private static HttpHelper mInstance = new HttpHelper();
private final OkHttpClient okhttp;
//创建Handler
private Handler handler = new Handler();
private HttpHelper(){
//1.创建OkHttpClient对象
// .cache(new Cache(file,size))//设置数据缓存的
okhttp = new OkHttpClient.Builder()
.readTimeout(15, TimeUnit.SECONDS)
.writeTimeout(15, TimeUnit.SECONDS)
// .cache(new Cache(file,size))//设置数据缓存的
.build();
}
public static HttpHelper create(){
return mInstance;
}
/**
* 执行get请求
* @param url
* @param callback
*/
public void execGet(String url, HttpCallback callback){
execGet(url,null,callback);
}
/***
* 执行get请求
* @param url
* @param callback
*/
public void execGet(String url, HashMap<String,String> headers, final HttpCallback callback){
//2.创建请求对象Request
Request.Builder builder = new Request.Builder()
.url(url)
.get();//设置请求方式是get
//添加header
if(headers!=null && !headers.isEmpty()){
Iterator<Map.Entry<String, String>> iterator = headers.entrySet().iterator();
while(iterator.hasNext()){
Map.Entry<String, String> entry = iterator.next();
builder.addHeader(entry.getKey(), entry.getValue());
}
}
Request request = builder.build();
//3.执行请求
Call call = okhttp.newCall(request);
//执行请求,但是这个方式是同步请求的方式
// Response response = call.execute();
//执行异步请求的方式
call.enqueue(new Callback() {
@Override
public void onFailure(Call call, final IOException e) {
e.printStackTrace();
//因为在子线程不能更新UI 所以利用Handler调用方法
handler.post(new Runnable() {
@Override
public void run() {
if(callback!=null){
callback.onFail(e);
}
}
});
}
@Override
public void onResponse(Call call, Response response) throws IOException {
//获取http相应体数据
ResponseBody body = response.body();
//将响应体的数据转为string
final String string = body.string();
handler.post(new Runnable() {
@Override
public void run() {
//将数据传递给外界
if(callback!=null){
callback.onSuccess(string);
}
}
});
}
});
}
public interface HttpCallback{
void onSuccess(String data);
void onFail(Exception e);
}
}