Я не могу ни за что в жизни выяснить, почему я получаю 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 является пустым в той точке. Любая справка очень ценилась бы.
О чем:
/** 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 **/
Только что написано с нуля. Пожалуйста, проверьте синтаксис
Возможно ли, что у вас есть другой XML-файл, определяющий тот же идентификатор ( coverLarge
) для другого типа просмотра (например, кнопки)? Также обратите внимание, что идентификатор, который вы используете для настройки диалогового окна, это cover_dialog
, но в XML-файле у вас есть coverDialog
У вас есть несколько вещей, происходящих в этой строке, которые могут помочь некоторые отладочные данные. Я бы начал с System.out.println
, указав значения coverLarge
и book
непосредственно перед строкой оскорбления. Я знаю, что они не должны быть нулевыми, но не помешало бы исключить эти возможности.
Этот
(ImageView)findViewById(R.id.coverLarge);
возвращает нулевое
значение. Возможно, вы передаете недопустимую / неверно сформированную строку идентификатора в метод findViewById
. Вы проверили (отладили), как выглядит эта строка, прежде чем получить NPE?