Пользовательский диалог Android NullPointerException - PullRequest
1 голос
/ 08 июня 2010

Не могу понять, почему я получаю исключение NullPointerException.

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

private OnClickListener coverListener = new OnClickListener() 
{
 public void onClick(View v) 
 { 
  showDialog(DIALOG_COVER);
 }
};

DIALOG_COVER установлен на = 0.

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

protected Dialog onCreateDialog(int id) {
 Dialog dialog;
 switch(id) 
 {
  case DIALOG_COVER:
   dialog = new Dialog(mContext);
   dialog.setContentView(R.layout.cover_dialog);
   dialog.setTitle(book.getTitle());
   ImageView coverLarge = (ImageView)findViewById(R.id.coverLarge);
   coverLarge.setImageBitmap(book.getCover());
      break;
  default:
      dialog = null;
 }
 return dialog;
}

Для справки: cover_dialog.xml:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
          android:id="@+id/coverDialog"
          android:orientation="horizontal"
          android:layout_width="fill_parent"
          android:layout_height="fill_parent"
          android:padding="10dp">
<ImageView android:id="@+id/coverLarge"
           android:layout_width="wrap_content"
           android:layout_height="wrap_content"
           android:scaleType="fitStart"
           /></LinearLayout>

Теперь, когда щелкнуло ранее описанное изображение, приложение немедленно падает и выдает следующую ошибку через LogCat:

06-08 13:29:17.727: ERROR/AndroidRuntime(2220): Uncaught handler: thread main exiting     due to uncaught exception 
06-08 13:29:17.757: ERROR/AndroidRuntime(2220): java.lang.NullPointerException
06-08 13:29:17.757: ERROR/AndroidRuntime(2220):     at org.kylehughes.android.brarian.AndroidBrarian.onCreateDialog(AndroidBrarian.java:259)

Рассматриваемая строка ссылается на эту строку внутри onCreateDialog:

coverLarge.setImageBitmap(book.getCover());

По сути, я не понимаю, почему coverLarge в этот момент равен нулю. Любая помощь будет высоко ценится.

Ответы [ 4 ]

2 голосов
/ 08 июня 2010

Что такое:

/** snip **/
LayoutInflater factory = LayoutInflater.from(mContext);
View dialogView = factory.inflate(R.layout.cover_dialog,null);
ImageView coverLarge = (ImageView)dialogView.findViewById(R.id.coverLarge);
dialog = new Dialog(mContext);
dialog.setContentView(dialogView);
dialog.setTitle(book.getTitle());
coverLarge.setImageBitmap(book.getCover());
/** snip **/

Только что написано с нуля. Пожалуйста, проверьте синтаксис

0 голосов
/ 08 июня 2010

Возможно ли, что у вас есть другой xml-файл, определяющий один и тот же идентификатор (coverLarge) для другого вида просмотра (скажем, кнопки)? Также обратите внимание, что идентификатор, который вы используете для настройки диалогового окна, равен cover_dialog, но в файле XML у вас есть coverDialog

0 голосов
/ 08 июня 2010

В этой строке происходит несколько вещей, которые могут помочь в некоторых результатах отладки.Я бы начал с System.out.println, используя значения coverLarge и book непосредственно перед ошибочной строкой.Я знаю, что они не должны быть нулевыми, но это не мешало бы исключить эти возможности.

0 голосов
/ 08 июня 2010

Это

(ImageView)findViewById(R.id.coverLarge);

возвращает значение null. Возможно, вы передаете недопустимую / неправильно сформированную строку идентификатора методу findViewById. Вы проверили (отладили), как выглядит эта строка, прежде чем получить NPE?

...