0

我是 android 新手,我在这段代码中的 if 语句中得到了 NullPointerException,我不知道为什么。此代码在我的 gridview 的 onItemClick 方法中,我在其中存储了 ImageView 的 2d 数组。

            ImageView selected = (ImageView) grid.getSelectedView();

            if(selected.getDrawable().equals(R.drawable.piecered2))
            {
                Toast.makeText(game.this, "red" , Toast.LENGTH_SHORT).show();
            }

该应用程序运行,但是当我实际单击一个项目时,它崩溃了,给了我一个 NullPointerException。

4

3 回答 3

1

撇开你的NullPointerException,你比较事物的方式是错误的。因为.equals()方法用于比较字符串。您的 R.drawable.piecered2 返回一个在 R.java 中生成的整数值(id)。您getDrawable()返回一个Drawable无法与整数比较的对象。

来到你NPE issue的 ,在你实际使用它们之前清楚地记录它们的值,getDrawable()无论它是否包含 null 或跟踪这些最方便的方法是调试你的代码。

于 2013-08-10T18:06:11.477 回答
1

文档指出Return the view's drawable, or null if no drawable has been assigned.。你有一个drawable分配吗?如果不是,则equals在 if 子句中调用 null 方法,这将导致 NullPointerException。如果你确定,你已经分配了一个drawale,我们可能需要更多的代码在这里。

于 2013-08-10T18:01:33.300 回答
1

假设你只有ImageView在你的GridView.

View v = grid.getChildAt(0);

if(v instanceof ImageView)
{
   ImageView selected = (ImageView) v;

   if(selected.getDrawable().equals(R.drawable.piecered2))
      {
         Toast.makeText(game.this, "red" , Toast.LENGTH_SHORT).show();
      }
}
于 2013-08-10T19:36:54.147 回答