新建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.