HttpUrlConnection使用Get和Post访问服务器的工具类(一)
首先我们有一个返回响应的接口HttpCallBackListener
public interface HttpCallbackListener { void onFinish(String response); void onError(Exception e); }
然后就是工具类的主体了
import android.util.Log; import org.json.JSONObject; import java.io.BufferedReader; import java.io.DataOutputStream; import java.io.InputStream; import java.io.InputStreamReader; import java.net.HttpURLConnection; import java.net.URL; import java.net.URLEncoder; import java.util.Map; public class HttpUtil { //使用Get方法,path存储一个网址,Map存储一个键值对 public static void sendHttpRequestForGet(final String path,final Map<String,String> params , final HttpCallbackListener listener){ new Thread(new Runnable() { @Override public void run() { HttpURLConnection connection=null; try{ StringBuilder stringBuilder=new StringBuilder(); StringBuilder response=new StringBuilder(); stringBuilder.append(path).append("?"); if(params!=null&¶ms.size()!=0){ for(Map.Entry<String,String> entry:params.entrySet()){ //转换成UTF-8 stringBuilder.append(entry.getKey()).append("=").append(URLEncoder.encode(entry.getValue(),"utf-8")); stringBuilder.append("&"); } //删除最后一个字符& stringBuilder.deleteCharAt(stringBuilder.length() - 1); } //此时网址变长了,增加了Map中的内容 URL url=new URL(stringBuilder.toString()); //打印网址 Log.e("HttpUtil",stringBuilder.toString()); connection=(HttpURLConnection)url.openConnection(); connection.setRequestMethod("GET"); connection.setConnectTimeout(100000); connection.setReadTimeout(100000); connection.setRequestProperty("Content-Type", "application/json"); //200表示连接成功 if(connection.getResponseCode()==200){ InputStream in=connection.getInputStream(); BufferedReader reader=new BufferedReader(new InputStreamReader(in,"utf-8")); String line; while ((line=reader.readLine())!=null){ response.append(line); } }else{ System.out.println(connection.getResponseCode()); Log.e("HttpUtil","fail"); } if(listener!=null){ Log.e("HttpUtil",response.toString()); //把response转换为String类型再作为参数传入,以便调用他的类访问 listener.onFinish(response.toString()); } }catch(Exception e){ if (listener!=null){ listener.onError(e); } }finally { if(connection!=null){ connection.disconnect(); } } } }).start(); } public static void sendHttpRequestForPost(final String path,final Map<String,String> paramsValue, final HttpCallbackListener listener){ new Thread(new Runnable() { @Override public void run() { HttpURLConnection connection=null; try{ StringBuilder response=new StringBuilder(); JSONObject jsonObject = new JSONObject(); for(Map.Entry<String,String> entry:paramsValue.entrySet()){ jsonObject.put(entry.getKey(),entry.getValue()); } URL url=new URL(path); connection=(HttpURLConnection) url.openConnection(); connection.setRequestMethod("POST"); connection.setConnectTimeout(100000); connection.setReadTimeout(100000); connection.setDoOutput(true); connection.setDoInput(true); //千万要记着这个setRequestProperty connection.setRequestProperty("Content-Type", "application/json;charset=UTF-8"); Log.d("HttpUtil", jsonObject.toString()); //将数据写给服务器 DataOutputStream out= new DataOutputStream(connection.getOutputStream()); out.writeBytes(jsonObject.toString()); Log.d("HttpUtil",jsonObject.toString()); //成功 if(connection.getResponseCode()==200){ Log.d("HttpUtil", "success"); InputStream in=connection.getInputStream(); BufferedReader reader=new BufferedReader(new InputStreamReader(in,"utf-8")); String line; while ((line=reader.readLine())!=null){ response.append(line); } }else{ Log.e("HttpUtil",Integer.toString(connection.getResponseCode())); Log.e("HttpUtil","fail"); } if(listener!=null){ Log.e("HttpUtil","注册成功"); Log.e("HttpUtil",response.toString()); listener.onFinish(response.toString()); } }catch(Exception e){ if (listener!=null){ Log.d("HttpUtil",e.getMessage()); listener.onError(e); } }finally { if(connection!=null){ connection.disconnect(); } } } }).start(); } }
假设我们要在MainActivity中访问
httpUtil.sendHttpRequestForGet("http://210.38.111.146:8080/WindBell/rest/login", map, new HttpCallbackListener() { @Override public void onFinish(String response) { //得到了response后就方便多了 } @Override public void onError(Exception e) { } });