简体   繁体   English

我想在Android Studio中制作一个总统审查应用程序,其中包含每个总统的照片,但是我一直在收到OutOfMemoryError

[英]I want to make a president review app in Android Studio that has pictures of every president, but I keep getting OutOfMemoryError

I have just started Android Studio and am also a little new to java, so please excuse the inefficient code. 我刚刚启动Android Studio,对Java也有些陌生,所以请原谅效率低下的代码。

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. 无论如何,当我单击应用程序上的主要活动上的按钮以将用户带到要显示图像的活动时,我的应用程序停止工作,并引发OutOfMemoryError。

Here is MainActivty.java: 这是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: 这是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: 这是大多数错误日志:

http://imgur.com/xzFfPrq http://imgur.com/xzFfPrq

Instead of store all the drawable content in an array. 而不是将所有可绘制内容存储在数组中。 You can actually just store the resource id in a array. 您实际上可以只将资源ID存储在数组中。

  1. replace private Drawable [] drawables = null; 替换private Drawable [] drawables = null; with private int[] drawableids 带有private int[] drawableids

  2. replace drawables = new Drawable[]{...} to drawableids = new int[]{...} drawables = new Drawable[]{...}替换为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. nullpointerexception可能是由于您没有初始化drawableids数组或您仍在使用drawables数组而不是drawableids引起的。

您正尝试将大尺寸图像直接加载到内存中,这会导致内存不足异常,对此问题进行了详细讨论,并且在开发人员站点中提供了一个不错的解决方案

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM