OKHttp
异步、同步下载
一.返回结果接口
public interface IDownloadResult {
public void success(String str);
public void error(String str);
}
二.工具类
public class OKHttp {
private static OKHttp okhttp = null;
private OkHttpClient client;
private OKHttp(){
}
public static OKHttp getInstance(){
if(okhttp == null){
synchronized (OKHttp.class){
if(okhttp == null)
okhttp = new OKHttp();
}
}
return okhttp;
}
IDownloadResult result;
public void setResult(IDownloadResult result){
this.result = result;
}
//返回Client对象
private OkHttpClient getClient(){
OkHttpClient client = new OkHttpClient.Builder()
.connectTimeout(5000, TimeUnit.MILLISECONDS)
.readTimeout(2000,TimeUnit.MILLISECONDS)
.addInterceptor(new Interceptor() {
@Override
public Response intercept(Chain chain) throws IOException {
/**
* 返回response,先获得request再通过调用proceed方法得到response
*/
Request request = chain.request();
Log.d("amy", String.format("Sending request %s on %s%n%s",
request.url(), chain.connection(), request.headers()));
Response response = chain.proceed(request);
return response;
}
})
.build();
return client;
}
/**
* 异步下载
*/
public void downLoadJsonStr(){
client = getClient();
final Request request = new Request.Builder().get().
url(Strings.URL_STR).build();
client.newCall(request).enqueue(new Callback() {
@Override
public void onFailure(Call call, IOException e) {
result.error(e.getMessage());
}
@Override
public void onResponse(Call call, Response response) throws IOException {
result.success(response.body().string());
}
});
}
//同步下载(调用时需要创建线程)
public void downLoadJsonStr_tongbu(){
client = getClient();
Request request = new Request.Builder().url(Strings.URL_STR).build();
try {
Response response = client.newCall(request).execute();
result.success(response.body().string());
} catch (IOException e) {
e.printStackTrace();
}
}
}