Android HttpURLConnection 写入 post 数据

Android HttpURLConnection write post data

我正在尝试通过 HttpURLConnection 发送 post 数据,但它似乎没有发送 post 数据。

我可以在尝试发送 POST 请求之前立即通过 Toast 输出数据,但是当我在服务器端检查时它会连接到 PHP 文件,但是POST 数据为空。

所以,我知道数据存在于 jsonObject 中。 我也知道它进入了 try catch 语句,但是当我连接时它没有被正确发送或接收。

try {
        URL url = new URL(emailURL);
        HttpURLConnection conn = (HttpURLConnection) url.openConnection();

        conn.setDoOutput(true);

        conn.setRequestMethod( "POST" );
        conn.setRequestProperty( "Content-Type", "application/json");
        conn.setRequestProperty( "charset", "utf-8");
        conn.setRequestProperty( "Content-Length", Integer.toString( jsonObject.toString().length() ));
        conn.setUseCaches( false );

        OutputStreamWriter wr = new OutputStreamWriter(conn.getOutputStream());

        wr.write(jsonObject.toString());

          wr.close();

        BufferedReader reader = null;
        reader = new BufferedReader(new InputStreamReader(conn.getInputStream()));
        StringBuilder sb = new StringBuilder();
        String line = null;

        // Read Server Response
        while ((line = reader.readLine()) != null) {
            // Append server response in string
            sb.append(line + "\n");
        }

        String text = "";
        text = sb.toString();



    } catch (Exception e) {

        throw new RuntimeException(e);
    }

尝试添加方法以确保它确实连接到您的服务器。

修改您的代码,如:

    int responseCodeFromServer = -1;
    try {
         responseCodeFromServer=conn.getResponseCode();
    } catch (Exception e){
         e.printStackTrace();
    }

    if (responseCodeFromServer == HttpsURLConnection.HTTP_OK){
         BufferedReader reader = null;
         reader = new BufferedReader(new InputStreamReader(conn.getInputStream()));
         StringBuilder sb = new StringBuilder();
        String line = null;

       // Read Server Response
       while ((line = reader.readLine()) != null) {
          // Append server response in string
          sb.append(line + "\n");
       }

       String text = "";
       text = sb.toString();
    }

因此,如果在连接到您的服务器时出现问题,您将看到异常。

在您获得响应代码或输入或错误流之前,什么都不会发生。您必须执行以下操作之一。

注意您不需要设置内容长度。 Java 为您做到这一点。同理,setDoOutput(true)设置请求方式为POST.

conn.setRequestProperty( "charset", "utf-8");
conn.setRequestProperty( "Content-Length", Integer.toString(jsonObject.toString().length() ));
conn.setUseCaches( false );

conn.connect(); // this is missing in your code

OutputStreamWriter wr = new OutputStreamWriter(conn.getOutputStream());