网络请求在主线程里面直接封装
来源:互联网 发布:java 同步互斥 编辑:程序博客网 时间:2024/06/05 05:27
这是网络请求的精华,代码量很小
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;
}
}
}
阅读全文
1 0
- 网络请求在主线程里面直接封装
- android网络请求不能放在主线程
- 血的教训,一定不要再4.0以后在主线程里面访问网络NetworkOnMainThreadException
- android4.0 HttpClient 以后不能在主线程发起网络请求
- 新线程网络请求,回调方法在主线程中进行
- socket(http或者其他网络请求)在主线程中使用会报错:NetworkOnMainThreadException
- 在主线程中不能连接网络
- 多线程更新 UI 需要在主线程里面写
- NSTimer直接使用需要在主线程中使用
- Webservice 封装为 Thread 在主线程进行调用--Android
- 请求主线程
- 下载网络图片&&网络工作在主线程异常,Handler
- Android4.0不能在主线程中进行HTTP请求
- Android4.0不能在主线程中进行HTTP请求
- Android4.0不能在主线程中进行HTTP请求
- Android4.0不能在主线程中进行HTTP请求
- Android4.0不能在主线程中进行HTTP请求
- 封装网络请求
- 26.leetCode406:Queue Reconstruction by Height
- codevs 数字三角形系列 (dfs or DP)
- HDU
- linux tomcat 安装
- 高仿iOS 滚轮实现 省市区 城市选择三级联动
- 网络请求在主线程里面直接封装
- spark 任务运行原理
- Android Studio相关
- Linux
- java回车键登录
- 浏览器滚动条设置
- [FAQ13618]L版本之后如何开启AAL功能
- Windows单机配置Kafka环境
- GKLinearCongruentialRandomSource