Java Android HttpURLConnection写post数据

Java Android HttpURLConnection写post数据,java,android,httpurlconnection,Java,Android,Httpurlconnection,我试图通过HttpURLConnection发送post数据,但它似乎没有发送post数据 在尝试发送POST请求之前,我能够立即通过Toast输出数据,但是当我在服务器端检查时,它会连接到PHP文件,但是POST数据是空的 因此,我知道数据存在于jsonObject中。 我也知道它会进入try-catch语句,但是当我连接它时,它没有被正确发送或接收 try { URL url = new URL(emailURL); HttpURLConnection con

我试图通过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为您做到了这一点。类似地,setDoOutputtrue将请求方法设置为POST。

只是一个问题,您知道有一些库使您的工作更容易,而您是否不使用它们?真的有吗?我对Android开发还不熟悉,所以这对我来说是全新的。试试这个:instagram使用它,很多著名的应用程序都可以省去很多痛苦。text=sb.toString;。你从文本中得到了什么?OkHttp或Volley是另外两个使POST非常容易的库。你所说的“添加方法”到底是什么意思?我的意思是添加条件以检测来自服务器的响应代码,请参阅变量responseCodeFromServer;设置请求方法:@cricket_007当然可以,但是OP已经在调用setDoOutput,setDoOutput也可以。请参阅Javadoc.connect是自动的。请参阅Javadoc。JavaDoc说URLConnection对象经历两个阶段:首先创建,然后连接。在创建之后和连接之前,可以指定各种选项,例如doInput和UseCaches。连接后,尝试设置它们是错误的。如有必要,依赖于连接的操作(如getContentLength)将隐式执行连接。@EJP connect不是自动的。垃圾阅读你自己的引文:你还没有测试过这个。
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());