Я получаю исключение NullPointerException в следующей строке, прокомментированной ниже.
Иногда я получаю его (особенно в первой инстанции), иногда я этого не делаю. Поэтому я пытаюсь решить это раз и навсегда.
Я извлекаю путь к файлу из базы данных изображений, а затем использую растровое декодирование на нем. Я уверен, что в базе данных есть значения.NullPointerException в ArrayList изображений
спасибо.
ImageDB imagedb = new ImageDB(this);
imagedb.open();
ArrayList<String> image_list = new ArrayList<String>();
image_list.clear();
if(imagedb.open() != null){
Cursor tagcursor = imagedb.retrieveTag(tag);
if(tagcursor.moveToFirst()){
do{
image_list.add(tagcursor.getString(tagcursor.getColumnIndex(tag)));
}
while(tagcursor.moveToNext());
}
tagcursor.close();
imagedb.close();
}
if(image_list != null && !image_list.isEmpty()){
Collections.shuffle(image_list);
if(image_list.get(0).toString() != null){ // nullpointerexception here or below if I comment here
imagepath = image_list.get(0).toString();
}
}
Это трассировка стеки, но его так же, как предупреждение, программа по-прежнему работает:
04-16 19:03:31.603: W/System.err(1355): java.lang.NullPointerException
04-16 19:03:31.613: W/System.err(1355): at com.MucaaApps.imageUpdate.ImageService.setTag(ImageService.java:422)
04-16 19:03:31.613: W/System.err(1355): at com.MucaaApps.ImageUpdate.imageService.setImageIcon(ImageService.java:377)
04-16 19:03:31.623: W/System.err(1355): at com.MucaaApps.ImageUpdate.ImageService.onStart(ImageService.java:237)
04-16 19:03:31.623: W/System.err(1355): at android.app.Service.onStartCommand(Service.java:306)
04-16 19:03:21.552: W/System.err(1355): at android.app.ActivityThread.handleServiceArgs(ActivityThread.java:2873)
04-16 19:03:21.552: W/System.err(1355): at android.app.ActivityThread.access$3500(ActivityThread.java:119)
04-16 19:03:21.552: W/System.err(1355): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1926)
04-16 19:03:21.552: W/System.err(1355): at android.os.Handler.dispatchMessage(Handler.java:99)
04-16 19:03:21.552: W/System.err(1355): at android.os.Looper.loop(Looper.java:123)
04-16 19:03:21.552: W/System.err(1355): at android.app.ActivityThread.main(ActivityThread.java:4363)
04-16 19:03:21.563: W/System.err(1355): at java.lang.reflect.Method.invokeNative(Native Method)
04-16 19:03:21.563: W/System.err(1355): at java.lang.reflect.Method.invoke(Method.java:521)
04-16 19:03:21.573: W/System.err(1355): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:860)
04-16 19:03:21.573: W/System.err(1355): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:618)
04-16 19:03:21.582: W/System.err(1355): at dalvik.system.NativeStart.main(Native Method)
Можете ли вы опубликовать StackTrace? Из вашего комментария, похоже, что нет ничего в индексе 0 из image_list, который заставил бы 'toString()' бросать 'NullPointerException' – Nicholas
@Nicholas, я добавил трассировку стека. Он приходит как предупреждение. Как я уже сказал, он показывает исключение NullPointerException в строке, которую я прокомментировал. – irobotxxx
Попробуйте положить строки прерывания или операторы вывода, чтобы убедиться, что 1) 'imagedb.open()' не является нулевым, 2) 'tagcursor' не является нулевым или имеет значения, 3)' image_list' имеет значения после попытки его заполнения. – Nicholas