1.场景


Android中经常会用到使用post方式请求json格式的数据。请求参数也是json格式的数据,在这里封装一下,方便日后查找。


2.HttpUrlConnection实现post请求


/**
     * 提交请求
     *
     * @param strUrlPath 请求的url
     * @param params     请求参数
     * @param encode     请求参数的编码方式
     * @return
     */
    public static String submitPostData(String strUrlPath, Map<String, Object> params, String encode) {
        int response = -1;
        byte[] data = new JSONObject(params).toString().getBytes();
        try {

            URL url = new URL(strUrlPath);

            HttpURLConnection httpURLConnection = (HttpURLConnection) url.openConnection();
            httpURLConnection.setConnectTimeout(3000);     //设置连接超时时间
            httpURLConnection.setDoInput(true);            //打开输入流,以便从服务器获取数据
            httpURLConnection.setDoOutput(true);           //打开输出流,以便向服务器提交数据
            httpURLConnection.setRequestMethod("POST");     //设置以Post方式提交数据
            httpURLConnection.setUseCaches(false);          //使用Post方式不能使用缓存
            //设置请求体的类型是文本类型
            httpURLConnection.setRequestProperty("Content-Type", "application/json");
            httpURLConnection.setRequestProperty("Char-Set", encode);
            //设置请求体的长度
            httpURLConnection.setRequestProperty("Content-Length", String.valueOf(data.length));
            //获得输出流,向服务器写入数据
            OutputStream outputStream = httpURLConnection.getOutputStream();
            outputStream.write(data);
            //获得服务器的响应码
            response = httpURLConnection.getResponseCode();
            if (response == HttpURLConnection.HTTP_OK) {
                //处理服务器的响应结果
                InputStream inputStream = httpURLConnection.getInputStream();
                String result = dealResponseResult(inputStream);
                if (!TextUtils.isEmpty(result)) {
                    try {
                        JSONObject jsonObject = new JSONObject(result);
                        boolean flag = jsonObject.optBoolean("success", false);
                        if (flag) {
                            response = 200;
                        } else {
                            response = -1;
                        }
                    } catch (JSONException e) {
                        e.printStackTrace();
                    }

                } else {
                    response = -1;
                }
            }
        } catch (IOException e) {
            Log.e(TAG, String.format("err: %s", e.toString()));
        }
        return response + "";
    }


    /**
     * 处理服务器的响应结果(将输入流转化成字符串)
     *
     * @param inputStream 服务器的响应输入流
     * @return
     */
    public static String dealResponseResult(InputStream inputStream) {
        String resultData;      //存储处理结果
        ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
        byte[] data = new byte[1024];
        int len = 0;
        try {
            while ((len = inputStream.read(data)) != -1) {
                byteArrayOutputStream.write(data, 0, len);
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
        resultData = new String(byteArrayOutputStream.toByteArray());
        return resultData;
    }