2

Знаете ли вы, почему я улавливаю исключение NullPointerException при вызове функции getInputStream()?NullPointerException on getInputstream

Я сделал журнал URLConnection, и ссылка правильная ... Я не могу понять, в чем проблема.

public Bitmap getBitmap(String resolution) { 
    URL url = null; 
    Bitmap bmp = null; 

    switch(resolution) { 
     case "thumb": 
      url = thumbUrl; 
      break; 

     case "low": 
      url = lowresUrl; 
      break; 

     case "standard": 
      url = standardresUrl; 
      break; 
    } 

    try { 

     URLConnection conn = url.openConnection(); 

     InputStream in = conn.getInputStream(); 

     bmp = BitmapFactory.decodeStream(in); 

     in.close(); 

    } 
    catch (Exception e) { 
     Log.e("Error", e.getMessage()); 
     e.printStackTrace(); 
    } 

    return bmp; 
} 

ответ

1

Благодарим за ответы. Проблема была внутри блока поймать в этой строке:

Log.e("Error", e.getMessage()); 

Функция GetMessage() возвращается нуль.

+0

В продолжение этого разговора у меня была такая же проблема, как у Микеле. e.getMessage() действительно возвращал значение null. Log.e выдает исключение, когда вы отправляете его null, поэтому для определения того, какое исключение было выбрано, я изменил инструкцию следующим образом: Log.e («Ошибка», e.toString()); и исключение оказалось «Network: android.os.NetworkOnMainThreadException», для меня в любом случае. После некоторого чтения я узнал, что вы не можете запускать блокировку вызовов ввода-вывода в основном потоке пользовательского интерфейса, что имеет смысл. – Ryan

2

Учитывая Опубликованный код, единственный разумный вывод о том, что conn является null. Вы можете проверить, что с помощью conditional operator ? : (тройных), как

// InputStream in = conn.getInputStream(); 
InputStream in = (conn != null) ? conn.getInputStream() : null; 

или что-то вроде

InputStream in = null; 
if (conn != null) { 
    in = conn.getInputStream(); 
} 

Я также отметить, что ваш switch не имеет default:, так что это также возможно, что url является null (но вы бы получили Exception на openConnection(), если бы это было так).

+0

Спасибо за ответ, но я упомянул, что я сделал журнал объекта String.valueOf (conn), и он не является нулевым. Кстати, я попробовал ваше решение, и я могу подтвердить, что URLConnection не является нулевым. – Michele

+0

В какой строке вы получаете исключение NullPunterException? – Rosie

+0

Вы должны ошибаться, или вы называете это более одного раза. Для вызова метода для вызова npe экземпляр, который вы пытаетесь вызвать, должен иметь значение NULL. –

0

Объявите и инициализируйте свою переменную перед попыткой захвата. В java-программировании не пытайтесь объявить переменную в try catch. До этого попробуйте поймать.

URLConnection conn=null; 
    InputStream in=null; 
    try { 

    conn = url.openConnection(); 

    in = conn.getInputStream(); 

    bmp = BitmapFactory.decodeStream(in); 

    in.close(); 

} 
+0

Спасибо. Похоже, проблема заключалась в том, что e.getMessage() вернулся null – Michele

+0

Проблема не в e.getMessage(). Если в попытке есть ошибка, тогда часть улова работает. Проблема заключается в вашей части try.When вы пишите java-программу, объявляете свою переменную перед тем, как попробовать ее, и инициализируйте ее нулевым. –