Исключение NullPointerException — как это могло произойти?

#java #android #nullpointerexception

#java #Android #исключение nullpointerexception

Вопрос:

полученный код выглядит следующим образом:

 // This is com.n.common.Networking.downloadBmp( ) function
// ...
byte[] data = inputStreamToByteArray(new PatchedInputStream(connectJava(url)));

// if the data is null in this moment - return;
if (data == null)      // <--- line 185
    return null;
// ...
  

И получил исключение, подобное этому:

 ERROR/AndroidRuntime(4526): Uncaught handler: thread pool-1-thread-2 exiting due to uncaught exception
ERROR/AndroidRuntime(4526): java.lang.NullPointerException
ERROR/AndroidRuntime(4526):     at com.n.common.Networking.downloadBmp(Networking.java:185)
ERROR/AndroidRuntime(4526):     at com.n.common.AsyncNetworking$3.run(AsyncNetworking.java:203)
ERROR/AndroidRuntime(4526):     at java.lang.Thread.run(Thread.java:1060)
ERROR/AndroidRuntime(4526):     at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:648)
ERROR/AndroidRuntime(4526):     at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:673)
ERROR/AndroidRuntime(4526):     at java.lang.Thread.run(Thread.java:1060)
  

Как это возможно?

РЕДАКТИРОВАТЬ: Вероятно, это связано с использованием функции Eclipse «Organize imports», которая изменила номера строк, и сравнением более новой версии кода со старой развернутой. Спасибо всем за помощь.

Комментарии:

1. Должно быть вне if (data == null) проверки.

2. что такое Networking.java строка 185?

3. Это код из Networking.java ?

4. Нет, это не так. Должен ли я опубликовать скриншот, чтобы доказать это? 🙂 @Nanne: мой класс, фрагмент которого вы видите выше.

5. @Kocus, NullPointerException вероятно, вызывается PatchedInputStream конструктором, connectJava методом или inputStreamToByteArray . Я бы посоветовал вам ознакомиться с их соответствующей документацией.

Ответ №1:

Должна быть проблема с развертыванием или что-то связанное с сохранением файлов и наличием нескольких версий. Код, который генерирует исключение, должен иметь строку 185, отличную от той, что вы опубликовали.

Попробуйте очистить / перекомпилировать / (повторно развернуть) и посмотрите, изменится ли номер строки

Комментарии:

1. Проблема в том, что я не могу воспроизвести это исключение. Это просто происходит при обычном использовании приложения.

2. Распространенной «проблемой развертывания» является ошибка компиляции, которая приводит к запуску Android старой версии. В любом случае со мной часто случается.

3. Хорошо, я понял. Это возможно благодаря использованию функции Eclipse «Organize Imports», которая удалила некоторые импортные файлы, и теперь сравнивает развернутый код с организованным.

Ответ №2:

Происходит что-то еще, эта строка не может выдать NPE. Скорее всего, у вас устаревшая сборка, которая сообщает неправильный номер строки в журналах.

Ответ №3:

Быстрое предположение состояло бы в том, что проблема где-то в «inputStreamToByteArray(new PatchedInputStream(connectJava(url)));».

Мне также интересно, что такое «connectJava»? Это метод, который вы создали? Если это так, пожалуйста, укажите и это, поскольку я подозреваю, что это вызывает проблему.

Комментарии:

1. Мне было просто любопытно, как подобный код мог вызвать NPE в этой строке. Хорошо, возможно (но очень маловероятно), что ошибка находится в одном из моих: inputStreamToByteArray() , PatchedInputStream , connectJava( ) .