【问题标题】:OutputStream os = con.getOutputStream() throws NullPointerExceptionOutputStream os = con.getOutputStream() 抛出 NullPointerException
【发布时间】:2016-04-08 11:05:11
【问题描述】:

我正在尝试为网站构建一个 android 应用程序,我需要先在此页面上发布一些价值。 这是我的代码:

private void sendPOST(String user,String pass) throws IOException {

        String POST_PARAMS = "username="+user+"&password="+pass;           
        URL obj = new URL("http://xx.xx.xx.xx/mysite/test.php");          
        HttpURLConnection con = (HttpURLConnection) obj.openConnection();
        con.setRequestMethod("POST");
        con.setRequestProperty("User-Agent", "Mozilla/5.0");

        //----------------------------------------------------------- For POST only - START---------------------------------------------

         con.setDoOutput(true);
         OutputStream os = con.getOutputStream();
         os.write(POST_PARAMS.getBytes());
         os.flush();
         os.close();

        // ------------------------------------------------------------For POST only - END----------------------------------------------------
        int responseCode = con.getResponseCode();                   
        if (responseCode == HttpURLConnection.HTTP_OK) { //success
            BufferedReader in = new BufferedReader(new InputStreamReader(
            con.getInputStream()));
            String inputLine;
            StringBuffer response = new StringBuffer();
            while ((inputLine = in.readLine()) != null) {
                response.append(inputLine);
            }
            in.close();
            // print result
            Toast.makeText(getApplicationContext(), response.toString()==""?"No Result":response.toString(), Toast.LENGTH_LONG).show();
        } else {
            Toast.makeText(getApplicationContext(),"POST request failed", Toast.LENGTH_LONG).show();
        }
    }

当这行被执行时OutputStream os = con.getOutputStream(); 发生空异常。 我无法继续进行。请建议我必须采取什么措施来消除此异常。

【问题讨论】:

  • 根据目前提供的信息,con 在那个时候不可能抛出 NPE。因此,您更有可能只是误解/误解了问题。因此,如果您编辑问题以粘贴未修改的堆栈跟踪,这将很有帮助,以避免红鲱鱼。
  • java post method in android studio throws exception。不是在 Android Studio 中,而是在您的应用程序中。不是 java 帖子,而是 HttpUrlConnection 帖子。
  • 删除 Toast() 语句。它们不能与网络代码一起使用。您在 AsyncTask 或线程中调用此代码?如果没有,你有一个 NetworkOnMainathreadException。

标签: java android nullpointerexception http-post urlconnection


【解决方案1】:

将您的开发服务器放在localhost 以外的其他位置(尝试使用真实 IP,例如:192.168.0.1)。

有时您会收到来自HttpUrlConnection.openConnection() 的成功连接(它返回非空对象),这不能保证后续调用成功。换句话说,当您调用con.getOutputStream() 时,无论con 是否为非空,它都会引发异常。

【讨论】:

    【解决方案2】:

    这是一个老问题,但我可能不得不回答它,因为我今天已经面对它了。当您 ping http(而不是 https)时,必须放入 manifest -> application: android:usesCleartextTraffic="true"

    【讨论】:

      【解决方案3】:

      我认为这在几年前会对你有所帮助......

              try(OutputStream os = con.getOutputStream()) {
                  byte[] input = POST_PARAMS.getBytes("utf-8");
                  os.write(input, 0, input.length);           
              }
      

      【讨论】:

        【解决方案4】:

        也许您应该先尝试“连接”,然后再对您创建的HttpURLConnection con 进行任何操作。

        HttpURLConnection con = (HttpURLConnection) obj.openConnection();
        con.connect();
        

        做更多的事情......

        希望对你有帮助:)

        【讨论】:

        • 我尝试了您的建议,但没有奏效。仍然出现异常。
        【解决方案5】:
        URL obj = new URL("http://xx.xx.xx.xx/mysite/test.php"); 
        

        URL 类对象“obj”无法正确访问您提到的 URL。

        试试这个:

        URL obj = new URL("http://"+"xx.xx.xx.xx/mysite/test.php"); 
        

        【讨论】:

        • 有什么区别?
        • 这两者没有区别,你能详细说明一下这是如何解决问题的吗?
        猜你喜欢
        • 2017-08-18
        • 1970-01-01
        • 2017-08-11
        • 2013-09-07
        • 2013-06-18
        • 2016-07-07
        • 2014-10-02
        • 2012-05-21
        • 2014-08-15
        相关资源
        最近更新 更多