2012-02-19 2 views
2

Я изучаю Android и новичок в Java, но не новичок в программировании (с использованием Eclipse). Я пытаюсь выполнить пример кода следующим образом в методе:Объявление InputStream

private void dummy() { 
    try { 
     URL url = new URL(quakeFeed); 
     URLConnection connection; 
     connection = url.openConnection(); 
     HttpURLConnection httpconnection = (HttpURLConnection)connection; 
     int responseCode = httpconnection.getResponseCode(); 
     if(responseCode == HttpURLConnection.HTTP_OK) 
      InputStream inp = new BufferedInputStream(httpconnection.getInputStream()); 
    } 
... 
} 

Предположим, что все остальные синтаксис и переменные определены. Я получаю следующее сообщение об ошибке:

InputStream` cannot be resolved to a variable.

Это странно, даже после импорта java.io.InputStream;

Ошибка гаснет, если я объявляю InputStream вне метода, то есть

InputStream inp; 
private void dummy() { 
    try { 
     URL url = new URL(quakeFeed); 
     URLConnection connection; 
     connection = url.openConnection(); 
     HttpURLConnection httpconnection = (HttpURLConnection)connection; 
     int responseCode = httpconnection.getResponseCode(); 
     if(responseCode == HttpURLConnection.HTTP_OK) 
     // Changed 
      inp = new BufferedInputStream(httpconnection.getInputStream()); 
    } 
    ... 
} 

Мне интересно, почему локальная декларация InputStream не может быть решена, но глобальная декларация разрешена.

ответ

5

Заявление if следует за заявлением. Для декларации переменной требуется блок. Если вам разрешено объявлять переменную там, она не будет иметь видимой видимости и не будет служить никакой цели.

Это должно работать:

if(responseCode == HttpURLConnection.HTTP_OK) 
{ /* Note the brace to start a block! */ 
    InputStream inp = new BufferedInputStream(httpconnection.getInputStream()); 
    /* Now use the stream within the block. */ 
    ... 
} 
+0

Ok Спасибо Я не был в курсе этого. –

Смежные вопросы