#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( )
.