0

I have just started Android Studio and am also a little new to java, so please excuse the inefficient code.

Anyway, when I click on the button on the main activity on my app to take the user to the activity that I want to display the images, my app stops working and it throws an OutOfMemoryError.

Here is MainActivty.java:

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    Button presidentQuizButton = (Button) findViewById(R.id.presidentQuizButton);
    Button reviewPresidentsButton = (Button) findViewById(R.id.reviewPresidentsButton);

    presidentQuizButton.setOnClickListener(new Button.OnClickListener(){
        public void onClick(View v){
            //when button is clicked, do something
        }
    });
    reviewPresidentsButton.setOnClickListener(new Button.OnClickListener(){
        public void onClick(View v){
            //when button is clicked, do something
            startActivity(new Intent(MainActivity.this, presidentReviewActivity.class));
        }
    });

}

Here is presidentReviewActivity.java:

ImageView imageView;
    public int presidentNumber = 0;

    private Drawable drawable;
    private Drawable [] drawables = null;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_president_review);

        Button menuButton = (Button) findViewById(R.id.menuButton);
        Button nextButton = (Button) findViewById(R.id.nextButton);
        Button backButton = (Button) findViewById(R.id.backButton);

        drawables = new Drawable[]{
                getResources().getDrawable(R.drawable.president1),
                getResources().getDrawable(R.drawable.president2),
                getResources().getDrawable(R.drawable.president3),
                getResources().getDrawable(R.drawable.president4),
                getResources().getDrawable(R.drawable.president5),
                getResources().getDrawable(R.drawable.president6),
                getResources().getDrawable(R.drawable.president7),
                getResources().getDrawable(R.drawable.president8),
                getResources().getDrawable(R.drawable.president9),
                getResources().getDrawable(R.drawable.president10),
                getResources().getDrawable(R.drawable.president11),
                getResources().getDrawable(R.drawable.president12),
                getResources().getDrawable(R.drawable.president13),
                getResources().getDrawable(R.drawable.president14),
                getResources().getDrawable(R.drawable.president15),
                getResources().getDrawable(R.drawable.president16),
                getResources().getDrawable(R.drawable.president17),
                getResources().getDrawable(R.drawable.president18),
                getResources().getDrawable(R.drawable.president19),
                getResources().getDrawable(R.drawable.president20),
                getResources().getDrawable(R.drawable.president21),
                getResources().getDrawable(R.drawable.president22),
                getResources().getDrawable(R.drawable.president23),
                getResources().getDrawable(R.drawable.president24),
                getResources().getDrawable(R.drawable.president25),
                getResources().getDrawable(R.drawable.president26),
                getResources().getDrawable(R.drawable.president27),
                getResources().getDrawable(R.drawable.president28),
                getResources().getDrawable(R.drawable.president29),
                getResources().getDrawable(R.drawable.president30),
                getResources().getDrawable(R.drawable.president31),
                getResources().getDrawable(R.drawable.president32),
                getResources().getDrawable(R.drawable.president33),
                getResources().getDrawable(R.drawable.president34),
                getResources().getDrawable(R.drawable.president35),
                getResources().getDrawable(R.drawable.president36),
                getResources().getDrawable(R.drawable.president37),
                getResources().getDrawable(R.drawable.president38),
                getResources().getDrawable(R.drawable.president39),
                getResources().getDrawable(R.drawable.president40),
                getResources().getDrawable(R.drawable.president41),
                getResources().getDrawable(R.drawable.president42),
                getResources().getDrawable(R.drawable.president43),
                getResources().getDrawable(R.drawable.president44),
        };

        menuButton.setOnClickListener(new View.OnClickListener(){
            @Override
            public void onClick(View v) {
                finish();
            }
        });

        nextButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                presidentNumber++;
                drawable = drawables[presidentNumber];
                imageView.setImageDrawable(drawable);
            }
        });

And here is most of the error log:

https://i.stack.imgur.com/Wcphi.jpg

Valery Viktorovsky
  • 6,487
  • 3
  • 39
  • 47
nrlambert
  • 1
  • 3

2 Answers2

1

Instead of store all the drawable content in an array. You can actually just store the resource id in a array.

  1. replace private Drawable [] drawables = null; with private int[] drawableids

  2. replace drawables = new Drawable[]{...} to drawableids = new int[]{...}

  3. replace

    drawable = drawables[presidentNumber];
    imageView.setImageDrawable(drawable);
    

to

drawable = getResource().getDrawable(drawableids[presidentNumber]);
imageView.setImageDrawable(drawable);

Try to change as above steps and try again. The nullpointerexception may be caused by you did not init the drawableids array or you are still using the drawables array instead of drawableids.

Surely
  • 1,649
  • 16
  • 23
0

you are trying to load large size images directly into memory which causes out of memory exceptions,this issue is discussed in details and a nice solution is given in developers site

nvinayshetty
  • 3,187
  • 1
  • 21
  • 32