因为每一个应用程序很可能会在许多地方都使用网络功能,而发送HTTP请求的代码基本都是相同的,通常情况下我们都应该将这些通用的网络操作提取到一个公关类里,并提供一个静态方法,当想要发起网络请求的时候就只需要简单的调用一下这个方法即可。
public class HttpUtil { 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) { //回调onFinish()方法 listener.onFinish(response.toString()); } }catch (Exception e) { if (listener != null) { //回调onError()方法 listener.onError(e); } }finally { if (connection != null){ connection.disconnect(); } } } }).start(); } }
因为如果我们在sendHttpRequest()方法中开启了一个线程来发起HTTP请求,那么服务器响应的数据是无法进行返回的,这时候就需要调用JAVA的回调机制。定义一个借口,onFinish用来处理响应的数据
public interface HttpCallbackListener { void onFinish(String response); void onError(Exception e); }