Java 从ImageVeiw获取可绘制时出现空指针异常

Java 从ImageVeiw获取可绘制时出现空指针异常,java,android,nullpointerexception,drawable,Java,Android,Nullpointerexception,Drawable,我有: 公共类TestButton扩展ImageButton{ 我有一些代码在以下位置生成空指针异常: final Drawable temp1 = babyview.getDrawable(); 在此之前,我使用: public void dancebabydance() { babyview = (ImageView) findViewById(R.id.baby); 以下是xml部分: <ImageView android:id="@+id/baby"

我有: 公共类TestButton扩展ImageButton{

我有一些代码在以下位置生成空指针异常:

  final Drawable temp1 = babyview.getDrawable();
在此之前,我使用:

 public void dancebabydance() {
  babyview = (ImageView) findViewById(R.id.baby);
以下是xml部分:

<ImageView
    android:id="@+id/baby"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignParentBottom="true"
    android:layout_alignParentLeft="true"
    android:src="@drawable/dbaby2"
     />

理想情况下,我尝试将dbaby2与可绘制的进行比较,看看它们是否相等,以及是否可以将它们更改为新的内容


像这样扩展ImageButton可以吗?我在哪里塞东西?

问题在第二部分

babyview = (ImageView) findViewById(R.id.baby);
在类(是否为
活动
?)视图中,没有此类视图。这种情况通常是由于以下三种原因之一:

1) 您忘了设置内容视图

2) 在调用
setContentView


3) 您在
setContentView
中使用了错误的布局问题在第二部分

babyview = (ImageView) findViewById(R.id.baby);
在类(是否为
活动
?)视图中,没有此类视图。这种情况通常是由于以下三种原因之一:

1) 您忘了设置内容视图

2) 在调用
setContentView


3) 您在
setContentView
中使用了错误的布局。我建议您使用
android:tag
字段设置一个可以比较的
字符串。没有其他方法适合您

getDrawable()
只有在代码中调用了
setImageDrawable()
时才会有值。 如果您试图获取您在
android:src
属性中提供的绘图功能,那么您必须直接从资源中获取,而不能从
ImageView
中获取

如果您知道资源id(例如R.id.my_drawable)并希望获得可绘制资源,则可以使用:

Drawable d = getResources().getDrawable(android.R.drawable.my_drawable);
    ImageView image = (ImageView)findViewById(R.id.image);
    image.setImageDrawable(d);
如果您不知道资源id,请查看答案

但是,您可以获得
图像视图的
位图

您可以调用
setDrawingCacheEnabled(true)
然后调用
getDrawaingCache()
以获取
位图
。如果执行此操作,请记住设置
setDrawingCacheEnabled(false)

我建议使用
android:tag
字段设置一个可以比较的
字符串。没有其他方法适合您

getDrawable()
只有在代码中调用了
setImageDrawable()
时才会有值。 如果您试图获取您在
android:src
属性中提供的绘图功能,那么您必须直接从资源中获取,而不能从
ImageView
中获取

如果您知道资源id(例如R.id.my_drawable)并希望获得可绘制资源,则可以使用:

Drawable d = getResources().getDrawable(android.R.drawable.my_drawable);
    ImageView image = (ImageView)findViewById(R.id.image);
    image.setImageDrawable(d);
如果您不知道资源id,请查看答案

但是,您可以获得
图像视图的
位图

您可以调用
setDrawingCacheEnabled(true)
然后调用
getDrawaingCache()
以获取
位图
。如果执行此操作,请记住设置
setDrawingCacheEnabled(false)

这可能很愚蠢,但您是否将contentView设置为ImageView所属的任何布局?从何处调用
DanceBayDance()
?发布我在回答中提到的那部分内容使用
android:tag
设置
字符串,并使用该字符串比较图像…您可以将资源id设置为标记值或设置资源名称…是的,我没有在这个类中设置contentView,也就是说,我猜这可能很愚蠢,但您是否将contentView设置为whatever布局您的ImageView是?的一部分,从中调用
dancebabydance()
?发布我在回答中提到的那部分内容使用
android:tag
设置
字符串,并使用该字符串比较图像…您可以将资源id设置为标记值或设置资源名称…是的,我没有在这个类中设置contentView,我想就是这样