获取变量的值null

时间:2011-04-28 09:36:10

标签: java nullpointerexception httpconnection

以下是我在此代码中的代码try块中的值我得到 httpconn = null 的值但是在第一行我将值存储到变量 httpconn < / strong>在第一行为何如此。我得到 nullpointerexception

public static String requestToken()
    {
         String url = Const.REQUEST_TOKEN_URL;
         String header = oauth_header(url, HttpProtocolConstants.HTTP_METHOD_GET);
         String requestTokenUrl = concatURL(url, header);
         HttpConnection httpConn = null;
         InputStream input = null;
         try
         {

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

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

                 StringBuffer buffer = new StringBuffer();
                 int ch;
                 while ( (ch = input.read()) != -1)
                 {
                     buffer.append( (char) ch);
                 }
                 String content = 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());

                 message = httpConn.getResponseMessage();


             }
             return message;//(getTwitterMessage(httpConn.getResponseCode()));
            }
            catch (IOException e) 
            {
                return "exception";
            }
            catch (Exception nc) 
            {
                return "noConnection";
            } finally {
             try {
                 httpConn.close();
                 input.close();
             } catch (IOException e) {
                 e.printStackTrace();
             }

2 个答案:

答案 0 :(得分:1)

finally区块中,执行

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

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

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

答案 1 :(得分:0)

在以下情况下抛出空指针异常:

  
    

在应用程序尝试在对象的情况下使用null时抛出     是必须的。其中包括:

  
  • 调用null对象的实例方法。
  • 访问或修改a的字段 null object。
  • 将null的长度视为无效 是阵列。
  • 访问或修改 null,好像它是一个数组。
  • 抛出null,就好像它是一样 可怜的价值。

因此,这表明您的httpConn = (HttpConnection) Connector.open(requestTokenUrl); // kris connection无效。签入