这是网络请求的精华,代码量很小
private volatile
static Utills
utills;
private
OkHttpClient client;
private
Handler handler;
//单例保证该方法执行后只能在同一时间使用同一个对象
public static synchronized
Utills getInstance(){
if (utills == null) {
utills=new Utills();
}
return utills;
}
//构造方法
public Utills() {
this.handler = new Handler();
client =new OkHttpClient();
}
//创建接口是为了实现异步调用
interface CallBacks{
void getString(String ss);
}
//请求网络的方法
注意凡是在callback中的方法都是在子线程中执行
public void getNetData(String url, final CallBacks callBacks){
Request request=new Request.Builder().url(url).build();
client.newCall(request).enqueue(new Callback() {
@Override//请求网络失败,失败的原因可以通过IOException e该参数转成String打印出来
public void onFailure(Call call, IOException e) {
System.out.println("====="+e.toString());
}
@Override//请求网络成功,请求回来的数据在response中保存,请求的内容在Call任务中保存,同样可以打印出来
public void onResponse(final Call call, Response response) throws IOException {
final String result= response.body().string();
//为什么要使用handler.post是为了把内容发送到主线程中
handler.post(new Runnable() {
@Override
public void run() {
//run里面的方法都在主线中
callBacks.getString(result);
}
});
}
});
}
2.网路请求的数据简单封装
public class Utills {
}
public class OkhttpUtils {
private static OkHttpClient client = new OkHttpClient();
private static OkhttpUtils utils = new OkhttpUtils();
public OkhttpUtils() {
}
private static OkhttpUtils okHttpUtils() {
return utils;
}
public void dogetAsync(String url, Callback callback) {
Request request = new Request.Builder().url(url).build();
client.newCall(request).enqueue(callback);
}
public String dogetTB(String url) {
Request request = new Request.Builder().url(url).build();
try {
Response execute = client.newCall(request).execute();
String string = execute.body().string();
return string;
} catch (IOException e) {
e.printStackTrace();
return null;
}
}
}