HttpUrlConnection使用Get和Post访问服务器的工具类(一)

来源:互联网 发布:js选项卡自动切换 编辑:程序博客网 时间:2024/06/10 21:10
首先我们有一个返回响应的接口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&&params.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) {                            }                        });

 

阅读全文
0 0
原创粉丝点击