-1

I am a little confused at the moment I am trying to setImageResource to some Images in an ImageView Array. I replicated the error in a simpler project so here is the code. I am sure this must be a silly mistake but I have tried a lot and could not figure out the proper execution. I can't understand why images is a null object reference since I already initialised it in every way I could think of. I am getting this error in the line mentioned in the code.

java.lang.NullPointerException: Attempt to invoke virtual method 'void android.widget.ImageView.setImageResource(int)' on a null object reference.

package com.example.test;

import android.media.Image;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.widget.ImageView;

public class MainActivity extends AppCompatActivity {
private ImageView image1;
private ImageView image2;
private ImageView image3;
private ImageView image;
private ImageView[] images = {image1, image2, image3, image};
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    image1 =(ImageView) findViewById(R.id.image1);
    image2 = (ImageView) findViewById(R.id.image2);
    image3 = (ImageView) findViewById(R.id.image3);
    image = (ImageView) findViewById(R.id.image);

    setImages();

}

public void setImages() {
    //This is where I am getting the error
    images[0].setImageResource(R.drawable.a);
    images[1].setImageResource(R.drawable.b);
    images[2].setImageResource(R.drawable.c);
    images[3].setImageResource(R.drawable.d);
}

}
Phantômaxx
  • 37,901
  • 21
  • 84
  • 115

3 Answers3

1
public class MainActivity extends AppCompatActivity {

private ImageView[] images = new ImageView[4];
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

images [0]=(ImageView) findViewById(R.id.image1);
images [1] = (ImageView) findViewById(R.id.image2);
images [2] = (ImageView) findViewById(R.id.image3);
images [3] = (ImageView) findViewById(R.id.image);

setImages();

}

public void setImages() {
//This is where I am getting the error
images[0].setImageResource(R.drawable.a);
images[1].setImageResource(R.drawable.b);
images[2].setImageResource(R.drawable.c);
images[3].setImageResource(R.drawable.d);
}
Lokesh Mehta
  • 631
  • 4
  • 5
0

When you have created array of images like below

 private ImageView[] images;

before creation of image1, image2 like on It will always return a null.

Try to use below code.

private ImageView[] images = {image1, image2, image3, image};
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    image1 =(ImageView) findViewById(R.id.image1);
    image2 = (ImageView) findViewById(R.id.image2);
    image3 = (ImageView) findViewById(R.id.image3);
    image = (ImageView) findViewById(R.id.image);
   images = new ImageView[]{image1, image2, image3, image};
    setImages();

}

Hope these help you.

Jitesh Mohite
  • 31,138
  • 12
  • 157
  • 147
0

You need to initialize images array after getting their values in the onCreate method because image1, image2, image3, and image were null at the time of the initialization of images due to the fact that initializers (the one you used for images) are executed before constructors (and definitely before the onCreate() method). Try the following instead,

public class MainActivity extends AppCompatActivity {
    private ImageView image1;
    private ImageView image2;
    private ImageView image3;
    private ImageView image;
    private ImageView[] images;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        image1 =(ImageView) findViewById(R.id.image1);
        image2 = (ImageView) findViewById(R.id.image2);
        image3 = (ImageView) findViewById(R.id.image3);
        image = (ImageView) findViewById(R.id.image);
        images = new ImageView[4];

        images[0] = image1;
        image[1] = image2;
        image[2] = image3;
        image[3] = image;

        setImages();

    }

    public void setImages() {
        images[0].setImageResource(R.drawable.a);
        images[1].setImageResource(R.drawable.b);
        images[2].setImageResource(R.drawable.c);
        images[3].setImageResource(R.drawable.d);
    }

}

Hope this helps

Omar El Halabi
  • 2,118
  • 1
  • 18
  • 26