1, 概述:
-
所有网络库的原理是: 网络请求一般是基于HttpURLConnection和HttpClient进行封装的,也有自己编写Socket实现的,比如ion和OkHttp;请求的执行一般是通过线程池来管理,异步请求得到结果,则通过回调接口接收;并且一般接收结果的回调都通过Handler去在主线程执行
2,网络请求介绍
-
Android原生:HttpURLConnection,HttpClient;
-
第三方的类库:XUtil,OkHttp,Afinal,Ion,Retrofit,Volley等等
* Ion:Android Asynchronous Networking and Image Loading
* Volley:谷歌官方推出的网络请求和图片加载库
* Retrofit:Square开源的基于OKHttp的性能良好更安全的类库
3,模拟网络请求框架内部实现更新UI
【1】创建请求方法
-
创建子线程,子线程中获取数据
-
判断请求吗,当请求码返回正常时接口回调,把返回的值传出去
-
通过handler返回主线程更新UI
Handler handler = new Handler();
public void sendRequest(String url, final HttpCallback callback){
new Thread(){
@Override
public void run() {
super.run();
//执行网络请求,得到结果
final String result = "json数据";
//如果请求响应吗==200
final int code=200;
//在主线程执行接口的方法
handler.post(new Runnable() {
@Override
public void run() {
if(code == 200){
callback.onSuccess(result);
}else {
callback.onFail(new IllegalArgumentException("呵呵"));
}
}
});
}
}.start();
}
public interface HttpCallback{
void onSuccess(String data);
void onFail(Exception e);
}
【2】调用handler可以直接更新UI
sendRequest("url", new HttpCallback() {
@Override
public void onSuccess(String data) {
返回成功更新UI
}
@Override
public void onFail(Exception e) {
}
});
4055

被折叠的 条评论
为什么被折叠?



