您的位置:首页 > 理论基础 > 计算机网络

新线程网络请求,回调方法在主线程中进行

2016-01-07 14:12 513 查看
新建HttpUtil类

写出其中的Http请求方法sendHttpRequest,定义回调接口。

public class HttpUtil {
public static void sendHttpRequest(final String address,final HttpCallbackListenner listener){
new Thread(new Runnable() {

@Override
public void run() {
// TODO Auto-generated method stub
HttpURLConnection connection=null;
try {
URL url=new URL(address);
connection=(HttpURLConnection) url.openConnection();
connection.setReadTimeout(8000);
connection.setConnectTimeout(8000);
connection.setRequestMethod("GET");
InputStream is=connection.getInputStream();
BufferedReader reader=new BufferedReader(new InputStreamReader(is));
String str;
StringBuilder response=new StringBuilder();
while((str=reader.readLine())!=null){
response.append(str);
}
if(listener!=null){
listener.onComplete(response.toString());
}
} catch (Exception e) {
// TODO Auto-generated catch block
if(listener!=null)
listener.onError(e);
}
finally{
if(connection!=null)
connection.disconnect();
}
}
}).start();
}
public interface HttpCallbackListenner{
void onComplete(String response);
void onError(Exception e);
}
}


现在onComplete和onError方法是在新开线程总执行的,不能进行更新UI等一系列操作,所以需要我们新建方法requestInMainThread方法,让回调能在主线程中进行:

private Handler handler = new Handler(Looper.getMainLooper());
public void requestInMainLooper(String address,final HttpCallbackListenner listener) {
sendHttpRequest(address, new HttpCallbackListenner() {

@Override
public void onComplete(final String response) {
handler.post(new Runnable() {

@Override
public void run() {
listener.onComplete(response);
}
});
}
@Override
public void onError(final Exception e) {
handler.post(new Runnable() {

@Override
public void run() {
listener.onError(e);
}
});
}

});
}


end.
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: