不要通过 POST 在 Android 上使用 HTTPURLCONNECTION 发送数据

Don't send data via POST with HTTURLCONNECTION on Android

(抱歉我的英语不好) 我有下一个代码通过 POST 将数据发送到服务器。此代码在另一个应用程序中正常工作。但这现在不起作用。 return响应数据是一个函数:

BufferedReader reader = null;

    try {
        URL url = new URL(path);

        HttpURLConnection conecc = (HttpURLConnection) url.openConnection();

        conecc.setReadTimeout(5000);
        conecc.setConnectTimeout(5000);
        conecc.setDoOutput(true);
        conecc.setDoInput(true);
        conecc.setChunkedStreamingMode(0);
        conecc.connect();

        Uri.Builder builder = new Uri.Builder()
                .appendQueryParameter("name", name)
                .appendQueryParameter("birthday", bithday)
                .appendQueryParameter("sex", sex);

        String query = builder.build().getEncodedQuery();

        OutputStream outputstream = conecc.getOutputStream();

        BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(outputstream, "UTF-8"));

        writer.write(query);

        outputstream.close();

        StringBuilder sbuilder = new StringBuilder();
        reader = new BufferedReader(new InputStreamReader(conecc.getInputStream()));

        String line;
        while((line = reader.readLine()) != null) {
            sbuilder.append(line + "\n");
        }
        //writer.flush();
        //writer.close();
        return sbuilder.toString();

    } catch (Exception e) {
        e.printStackTrace();
        return  null;
    } finally {

        if (reader != null) {
            try {
                reader.close();

            } catch (IOException e) {
                e.printStackTrace();
                return null;
            }
        }
    } 

在服务器上我只有这个 (PHP):

print_r($_POST)

但是我得到一个空数组。然后与服务器的连接正常,但未发送数据。

Array()

我在 conecc.connect() 之前添加了这些行;未成功:

conecc.setRequestProperty("Connection", "Keep-Alive");
System.setProperty("http.keepAlive", "false");
conecc.setRequestProperty("User-Agent", "Mozilla/5.0 ( compatible ) ");
conecc.setRequestProperty("Accept", "*/*");
conecc.setRequestMethod("POST");

您尝试过 conecc.setRequestMethod("POST"); 吗?

从您的其余部分 class 来看,似乎没有错别字。但可以肯定的是,检查 String query = builder.build().getEncodedQuery(); 是否产生非空结果(只需记录它,或显示为 Toast)。

检查 this 以获得对您的问题的额外帮助。

编辑

检查 this as well 以了解解决问题的其他方法。

因为你看起来像巴西人,如果你不能写你的东西,post 请在评论中使用葡萄牙语 want/need,我们会尽力提供帮助。 我会尽量简单地说,from a similar question

URL url = new URL("http://YOUR_URL.com");
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
conecc.setReadTimeout(10000);
conecc.setConnectTimeout(15000);
conecc.setRequestMethod("POST");
conecc.setRequestProperty("Accept-Charset", "UTF-8");
conecc.setRequestProperty("Content-Type", "application/x-www-form-urlencoded;charset=UTF-8");
conecc.setDoInput(true);
conecc.setDoOutput(true);

OutputStream os = conn.getOutputStream();
BufferedWriter writer = new BufferedWriter(
    new OutputStreamWriter(os, "UTF-8"));
writer.write(getQuery(params));
writer.flush();
writer.close();
os.close();

conecc.connect();

在同一个 class:

private String getQuery(List<NameValuePair> params) throws UnsupportedEncodingException
{
StringBuilder result = new StringBuilder();
boolean first = true;

for (NameValuePair pair : params)
{
    if (first)
        first = false;
    else
        result.append("&");

    result.append(URLEncoder.encode(pair.getName(), "UTF-8"));
    result.append("=");
    result.append(URLEncoder.encode(pair.getValue(), "UTF-8"));
}

return result.toString();
}