首先,定义一个回调接口,创造两个抽象方法,用于在发送http请求之后回调结果和抛出异常:
public interface HttpCallbackListener {
void onFinish(String response); //http访问结束之后回调
void onError(Exception e);//出现异常的时候回调
}
然后编写http请求的工具类,传入url和刚才定义的回调接口:
<span style="white-space:pre"> </span>public class HttpUtil {
<span style="white-space:pre"> </span>public static void sendHttpRequest(final String address, final HttpCallbackListener listener) {
new Thread(new Runnable() { //新起一个线程进行耗时操作
@Override
public void run() {
HttpURLConnection connection = null;
try {
URL url = new URL(address);
connection = (HttpURLConnection) url.openConnection();
connection.setRequestMethod("GET");
connection.setConnectTimeout(8000);
connection.setReadTimeout(8000);
InputStream in = connection.getInputStream();
BufferedReader reader = new BufferedReader(new InputStreamReader(in));
StringBuilder response = new StringBuilder();
String line;
while ((line = reader.readLine()) != null) {
response.append(line);
}
if (listener != null) {
listener.onFinish(response.toString());
} //当回调函数不为空时,结束之后回调finish方法。
} catch (Exception e) {
if (listener != null) {
listener.onError(e); //在发生异常时,若回调函数不为空,则回调onError方法
}
} finally {
if (connection != null) {
connection.disconnect();
}
}
}
}).start(); //启动线程
}
}
当在具体调用上面的链接工具类时,因为HttpCallbackListener中有抽象的方法,必须进行重载,所以再实际调用的时候为抽象方法定义具体的内容:
HttpUtil.sendHttpRequest(address, new HttpCallbackListener() {
@Override
public void onFinish(String response) {
//当finish的时候一定会回调到此方法,这里填入具体要执行的动作
}
@Override
public void onError(Exception e) {
<span style="white-space:pre"> </span> //具体要执行的动作
}
});