【问题标题】:Blackberry HttpPost null pointer exception Java黑莓 HttpPost 空指针异常 Java
【发布时间】:2012-11-14 10:27:00
【问题描述】:

使用以下代码,服务器受到攻击,但我也想在 POST 方法中发送变量。

但它只是给了我一个空指针异常。它与OutputStream 有关。我检查了postData ...它有一些地址,这意味着它不为空。

那为什么给我空指针异常呢?

ConnectionFactory connFact = new ConnectionFactory();
ConnectionDescriptor connDesc;
try {
    connDesc = connFact.getConnection("http://example.com/login.php", Connector.READ_WRITE, returnContent);
    httpConn.setRequestMethod(HttpConnection.POST);
    httpConn.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");

    URLEncodedPostData encPostData = new URLEncodedPostData("UTF-8", false);
    encPostData.append("count", "Hell Yeah!");
    byte[] postData = encPostData.toString().getBytes("UTF-8");

    httpConn.setRequestProperty("Content-length", String.valueOf(postData.length));
    Dialog.alert("Post Data: " + postData);

    OutputStream os = httpConn.openOutputStream();
    os.write(postData);
    os.flush();
    httpConn = (HttpConnection) connDesc.getConnection();

    final int iResponseCode = httpConn.getResponseCode();
    UiApplication.getUiApplication().invokeLater(new Runnable() {
        public void run() {
            //Dialog.alert("Response code: " +  Integer.toString(iResponseCode));
        }
    });
} catch (IOException e) {
    System.err.println("Caught IOException: " + e.getMessage());
}

【问题讨论】:

  • 哪一行出错了?
  • 在这一行:httpConn.setRequestMethod(HttpConnection.POST);
  • 你到底在哪里声明变量httpConn?你不应该打电话给connDesc.getConnection吗?
  • 上面是ConnectionFactory,HttpConnection httpConn;没有它的工作正常:connFact.getConnection

标签: blackberry nullpointerexception http-post


【解决方案1】:

您误用了ConnectionFactory.getConnection(String url, int transportType, String ConnectionUID) 方法。例如,检查您传递的内容为transportType...

以下是 API 关于返回值的说明:

如果可以建立连接,则返回:ConnectionDescriptor; 否则为空

所以,它只是失败并返回null。这就是你获得 NPE 的原因。

更新

我建议只使用更简单的 API ConnectionFactory.getConnection(String url)

ConnectionDescriptor cd = connFact.getConnection("http://example.com/login.php");
if (cd == null) {
    // throw an error signalling there is no connectivity right now
}
HttpConnection httpConn = (HttpConnection) cd.getConnection();
// the rest of the code working with httpConn ..

【讨论】:

  • ConnectionUID和transportType应该是什么,如果你能举个例子,我将不胜感激!
  • 检查 UPDATE 部分,基本上你可以将细节(例如使用什么传输)传递给底层 API,只需使用 ConnectionFactory.getConnection(String url) 方法。
  • 顺便说一句,请注意,在您的代码中 httpConn = (HttpConnection) connDesc.getConnection() 为时已晚(在 os.flush() 之后)。
【解决方案2】:

查看链接的答案并验证“登录”程序的实施是否满足您的需求: authentication username password url in blackberry

【讨论】:

    猜你喜欢
    • 2011-01-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多