Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Android ImageView NullPointerException

I have two images, a red light and a green light. I have a custom ListView that I would like to display a red light when a list item is inactive, and a green light when it is active. A list item is activated when it is pressed.

Here is my code

row.xml

<ImageView
    android:id="@+id/iconLight"
    android:src="@drawable/light_off"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"/>

main.java

ImageView iconLight = (ImageView)findViewById(R.id.iconLight);
iconLight.setImageResource(R.drawable.light_on);

I get a NullPointerException executing the line that sets the image resource. So I did a little testing, I deleted the line setting the src in the XML file and just tried to set it in the main class. Still a NPE. So I tried not changing the resource, but just changing the alpha. Still NPE.

I'm not sure what I'm doing wrong. The files light_off.png and light_on.png are both in res/drawable-ldpi and either of them work when I specify them in the XML. But any change I attempt to make to iconLight in the main file causes this NPE. Any ideas?

like image 573
linsek Avatar asked Dec 12 '22 17:12

linsek


2 Answers

The only way to get a NPE in the line...

iconLight.setImageResource(R.drawable.light_on);

Is for iconLight to be null. So, your findViewById is failing. Have you set your layout before you call findViewById? Are you sure R.id.iconLight is in the Activity's root layout?

like image 145
Andrew White Avatar answered Jan 17 '23 04:01

Andrew White


I had the same problem. Here is a code that helped me understand. It is for a Dialog window but might help you too.

    final Dialog dialog = new Dialog(context);
    dialog.setContentView(R.layout.custom);
    dialog.setTitle("Title...");
    TextView text = (TextView) dialog.findViewById(R.id.text);
    text.setText("Android");
    ImageView image = (ImageView) dialog.findViewById(R.id.image);
    image.setImageResource(R.drawable.ic_launcher);

Watch the line before the last one. Notice how it instantiates the ImageView. Anyway every change to the image is made after the setContentView.

like image 20
Boris Karloff Avatar answered Jan 17 '23 05:01

Boris Karloff