Java Android自定义对话框NullPointerException

Java Android自定义对话框NullPointerException,java,android,dialog,nullpointerexception,Java,Android,Dialog,Nullpointerexception,我一辈子都搞不懂为什么我会得到NullPointerException 当用户单击特定图像时,将弹出一个对话框窗口,并显示所述图像的较大版本: private OnClickListener coverListener = new OnClickListener() { public void onClick(View v) { showDialog(DIALOG_COVER); } }; 对话框覆盖设置为=0 关联的onCreateDialog如下所示: protected

我一辈子都搞不懂为什么我会得到NullPointerException

当用户单击特定图像时,将弹出一个对话框窗口,并显示所述图像的较大版本:

private OnClickListener coverListener = new OnClickListener() 
{
 public void onClick(View v) 
 { 
  showDialog(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>
该行是指onCreateDialog中的这一行:

coverLarge.setImageBitmap(book.getCover());
基本上,我不明白为什么coverLarge在这一点上是空的。任何帮助都将不胜感激。

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

返回一个
null
值。您可能正在向
findviewbyd
方法传递无效/格式错误的id字符串。在获得NPE之前,您是否检查(调试)了该字符串的外观?

是否可能有不同的xml文件为不同类型的视图(例如按钮)定义相同的ID(
coverLarge
)呢?另外,请注意,您用来设置对话框的id是
cover\u dialog
,但是在XML文件中,您有
coverDialog

在该行有一些事情正在进行,一些调试输出会有所帮助。我先从
System.out.println
开始,在有问题的行之前,输入
coverLarge
book
的值。我知道它们不应该为空,但排除这些可能性也无妨。

关于:

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

只是白手起家写的。请检查语法

coverDialog表示cover_dialog.xml内部的线性布局。我尝试将ImageView重命名为一些完全荒谬的东西(以及它引用的所有位置),但我仍然得到相同的错误。这只是一个很长的数字,与我应用程序中的其余ID一致。哦,是的,在完成之后,捕获book.getCover()的值并将其打印出来。同样,为了确保.coverLarge为空,book和book.getCover都将地址返回到各自的对象。基本上,我在dialogView中查找R.id.coverLarge引用,而您在Activity View中查找它。先生,您刚刚为我节省了更多的时间。非常感谢你。
/** 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 **/