onResume方法导致Activity崩溃

时间:2017-01-13 11:25:20

标签: android onresume

我重写onResume方法来加载我的活动的previos状态,即旋转器最后选择的项目等。但是相同的代码适用于某些活动,但对于某些活动,它会导致崩溃,因为当我从它们中移除此onResume时,Activity不会崩溃。

这是代码

 @Override
    protected void onResume() {
        super.onResume();

        sp1 = (Spinner)findViewById(R.id.spinner);
        sp2=(Spinner)findViewById(R.id.spinner1);
        sp3=(Spinner)findViewById(R.id.spinner2);
        sp4=(Spinner)findViewById(R.id.spinner3);
        sp5=(Spinner)findViewById(R.id.spinner4);

TextView tx=(TextView)findViewById(R.id.upgradeResult) ;
        SharedPreferences prefs = getSharedPreferences("restore_defensiveBuildings_state", Context.MODE_PRIVATE);
        int spinner1Indx = prefs.getInt("spinner1_indx", 0);
        int spinner2Indx = prefs.getInt("spinner2_indx", 0);
        int spinner3Indx = prefs.getInt("spinner3_indx", 0);
        int spinner4Indx = prefs.getInt("spinner4_indx", 0);
        int spinner5Indx = prefs.getInt("spinner5_indx", 0);


        sp1.setSelection(spinner1Indx);
        sp2.setSelection(spinner2Indx);
        sp3.setSelection(spinner3Indx);
        sp4.setSelection(spinner4Indx);
        sp5.setSelection(spinner5Indx);


        tx.setText(""+totalAirBombUpgradeCost);
    }

这是我将项目加载到适配器

的方式
     Spinner sp1;
        Spinner sp2;
        Spinner sp3;
        Spinner sp4;
        Spinner sp5;

        TextView tx;
        Button sbmt;
    String levels[]={"Level 1",
            "Level 2",
            "Level 3",
            "Level 4"

           };

        int[] images={R.drawable.giant_bomb_1and2,
                R.drawable.giant_bomb_1and2 ,
                R.drawable.giant_bomb_3and4,
                R.drawable.giant_bomb_3and4


                };

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


//// initialize all your visual fields
//          if (savedInstanceState != null) {
//              sp1.setSelection(savedInstanceState.getInt("MySpinner1", 0));
//              // do this for each of your text views
//          }



sbmt=(Button)findViewById(R.id.submit);
tx=(TextView)findViewById(R.id.upgradeResult);
        sp1=(Spinner)findViewById(spinner);
        sp2=(Spinner)findViewById(R.id.spinner1);
          sp3=(Spinner)findViewById(R.id.spinner2);
          sp4=(Spinner)findViewById(R.id.spinner3);
          sp5=(Spinner)findViewById(R.id.spinner4);


        SpinnerAdapterGiant adapter=new SpinnerAdapterGiant(this,levels,images);



          sp1.setAdapter(adapter);

        sp2.setAdapter(adapter);
          sp3.setAdapter(adapter);
          sp4.setAdapter(adapter);
          sp5.setAdapter(adapter);

这就是错误

  java.lang.ArrayIndexOutOfBoundsException: length=4; index=4   
编辑:当我删除onResume()时,一切正常,应用程序不会崩溃,只是它没有加载活动的先前状态。

2 个答案:

答案 0 :(得分:0)

因为在数组中你只放了4个值而且有5个微调器因此在第5个微调器中出现错误。

答案 1 :(得分:0)

您正在尝试访问大小为4的数组中的第5个元素。您的关卡和图像数组仅适用于元素,但您有5个微调器 将数组大小增加到5。