Android自定义对话框NullPointerException

时间:2010-06-08 17:49:03

标签: java android dialog nullpointerexception

我不能为我的生活弄清楚为什么我得到一个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 个答案:

答案 0 :(得分:2)

关键词:

/** 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 **/

刚从头开始写。请检查语法

答案 1 :(得分:0)

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

返回null值。您可能会将无效/格式错误的ID字符串传递给findViewById方法。在获得NPE之前,您是否已检查(调试过)此String的外观?

答案 2 :(得分:0)

是否有可能为不同类型的View(比如一个Button)定义一个不同的xml文件定义相同的ID(coverLarge)?另外,请注意您用于设置对话框的ID是cover_dialog,但在XML文件中,您有coverDialog

答案 3 :(得分:0)

你在这一行上发生了一些事情,一些调试输出会有所帮助。我会在违规行之前System.out.println开始coverLargebook的值。我知道他们不应该是空的,但是将这些可能性排除在外并不会有什么坏处。