0

这是我在这段代码中的代码 try 块中的值我得到了httpconn = null的值,但是在第一行中,我将值存储到第一行的变量httpconn中,为什么会这样。我得到nullpointerexception

公共静态字符串 requestToken()
    {
         字符串 url = Const.REQUEST_TOKEN_URL;
         字符串标头 = oauth_header(url, HttpProtocolConstants.HTTP_METHOD_GET);
         字符串 requestTokenUrl = concatURL(url, header);
         HttpConnection httpConn = null;
         输入流输入=空;
         尝试
         {

            httpConn = (HttpConnection) Connector.open(requestTokenUrl); // 克里斯连接
             httpConn.setRequestMethod(HttpProtocolConstants.HTTP_METHOD_GET);
             httpConn.setRequestProperty("WWW-Authenticate","OAuth realm=http://twitter.com/");
             httpConn.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");

             输入 = httpConn.openDataInputStream();
             int resp = httpConn.getResponseCode();
             if (resp == HttpConnection.HTTP_OK)
             {

                 StringBuffer 缓冲区 = new StringBuffer();
                 整数通道;
                 而 ( (ch = input.read()) != -1)
                 {
                     buffer.append((char) ch);
                 }
                 字符串内容 = buffer.toString();
                 Const.token = content.substring(content.indexOf((Const.OAUTH_TOKEN+"="))+(Const.OAUTH_TOKEN+"=").length(), content.indexOf('&'));
                 Const.tokenSecret = content.substring(content.indexOf((Const.OAUTH_TOKEN_SECRET+"="))+(Const.OAUTH_TOKEN_SECRET+"=").length(), content.length());

                 消息 = httpConn.getResponseMessage();


             }
             返回消息;//(getTwitterMessage(httpConn.getResponseCode()));
            }
            捕获(IOException e)
            {
                返回“异常”;
            }
            捕获(异常 nc)
            {
                返回“无连接”;
            } 最后 {
             尝试 {
                 httpConn.close();
                 输入.close();
             } 捕捉(IOException e){
                 e.printStackTrace();
             }
4

2 回答 2

1

finally块中,做

if (httpConn != null)
    httpConn.close();

if (input != null)
    input.close();

如果例如在您发布的代码中Connector.open()引发异常,httpConn则不会初始化为null. 您将捕获该异常并希望返回与其相关的信息,但在返回之前,您尝试访问一个空指针(在finally块中),该指针会引发NullPointerException.

于 2011-04-28T09:43:24.797 回答
0

在以下情况下会引发空指针异常:

当应用程序在需要对象的情况下尝试使用 null 时引发。这些包括:

  • 调用空对象的实例方法。
  • 访问或修改空对象的字段。
  • 将 null 的长度视为一个数组。
  • 访问或修改 null 的槽,就像它是一个数组一样。
  • 把 null 当作一个 Throwable 值来抛出。

所以这表明你httpConn = (HttpConnection) Connector.open(requestTokenUrl); // kris connection没有工作。签到

于 2011-04-28T09:44:56.913 回答