• 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&&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) {
    
                                }
                            });
  • 相关阅读:
    ASP.NET MVC学习笔记-----ActionInvoker
    quartz启动报错
    THUSC 2021 游记
    C++下随机数的生成
    友链
    memset一些技巧
    CodeForces Round #705 总结&题解
    php计算两坐标距离
    vue中使用keepAlive组件缓存遇到的坑
    vue 中 keepAlive
  • 原文地址:https://www.cnblogs.com/Liang-Blog/p/5774216.html
Copyright © 2020-2023  润新知