Java Android自定义对话框NullPointerException
我一辈子都搞不懂为什么我会得到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
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 **/