#android #dialog #bitmap #nullpointerexception
#Android #диалоговое окно #растровое изображение #исключение nullpointerexception
Вопрос:
Я использую диалоговое окно для отображения меню вариантов пользователю, а на экране диалога я использую ImageView. Я использую BitmapFactory.decodeFile () с указанием пути к файлу изображения, которое будет использоваться с SD-карты пользователя, и у меня определенно установлены все разрешения. Я проверил в отладчике, а также с помощью инструкций log, чтобы убедиться, что путь к файлу и растровое изображение имеют какую-то ценность, а не null. По какой-то причине, когда он переходит к использованию возвращенного изображения, он выдает исключение с нулевым указателем. Вот небольшой фрагмент кода для imageview диалогового окна
dialog2 = new Dialog(MyView.this);
LayoutInflater li = (LayoutInflater) MyView.this.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
View w = li.inflate(R.layout.userpreference, null, false);
dialog2.setContentView(w);
dialog2.setTitle("MY PREFERENCES");
////////////////////////////////////////////////////////////////////
profileImage = new ImageView(MyView.this);
profileImage = (ImageView) dialog2.findViewById(R.id.profileImage);
BitmapFactory.Options opts = new BitmapFactory.Options();
opts.inSampleSize = 16;
profileImage.setImageBitmap(BitmapFactory.decodeFile(curr_profimg,opts));
Я заметил, что мне не нужен layoutinflater, но я подумал, что это может быть как-то связано с ошибкой. Вот строки из logcat
11-06 03:31:15.488: E/AndroidRuntime(11889): FATAL EXCEPTION: main
11-06 03:31:15.488: E/AndroidRuntime(11889): java.lang.NullPointerException
11-06 03:31:15.488: E/AndroidRuntime(11889): at graf.main.MyView$6$9.onClick(MyView.java:567)
11-06 03:31:15.488: E/AndroidRuntime(11889): at android.view.View.performClick(View.java:2485)
11-06 03:31:15.488: E/AndroidRuntime(11889): at android.view.View$PerformClick.run(View.java:9089)
11-06 03:31:15.488: E/AndroidRuntime(11889): at android.os.Handler.handleCallback(Handler.java:587)
11-06 03:31:15.488: E/AndroidRuntime(11889): at android.os.Handler.dispatchMessage(Handler.java:92)
11-06 03:31:15.488: E/AndroidRuntime(11889): at android.os.Looper.loop(Looper.java:130)
11-06 03:31:15.488: E/AndroidRuntime(11889): at android.app.ActivityThread.main(ActivityThread.java:3806)
11-06 03:31:15.488: E/AndroidRuntime(11889): at java.lang.reflect.Method.invokeNative(Native Method)
11-06 03:31:15.488: E/AndroidRuntime(11889): at java.lang.reflect.Method.invoke(Method.java:507)
11-06 03:31:15.488: E/AndroidRuntime(11889): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839)
11-06 03:31:15.488: E/AndroidRuntime(11889): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597)
11-06 03:31:15.488: E/AndroidRuntime(11889): at dalvik.system.NativeStart.main(Native Method)
Как всегда, любой вклад по этому вопросу был бы высоко оценен
Комментарии:
1. dialog2.findViewById , замените это на w.findViewById
2. @YashwanthKumar спасибо за помощь, но я уже понял, что это было, лол …..пора спать 🙂
Ответ №1:
Я только что понял, что у меня возникла проблема с моим собственным соглашением об именовании, lol…..У меня было два ресурса с именем profileImage …. один с заглавной буквы I, а другой со строчной буквы i…..to много кофе и недостаточно сна …. еще одна причина вспомнить, что вы узнали в школе о соглашениях об именовании в нескольких классах, лол