-1

Тот же адаптер отлично работает при загрузке 12-14 элементов, но дает ошибку при загрузке менее 10 элементов.ArrayIndexOutOfBoundsException при сохранении элементов в пользовательском адаптере

Ошибка, вызванная, когда я ввел 6 элементов = ArrayIndexOutOfBoundsException: length = 6; index = 6

public class SpinnerAdapterAirSweeper extends ArrayAdapter <String>{ 


    Context c; 

    String[] levels; 
    int[] images; 

    public SpinnerAdapterAirSweeper(Context ctx, String[] levels, int[] images){ 

     super(ctx,R.layout.spinner_building_to_upgrade,levels); 
     this.c=ctx; 
     this.images=images; 
     this.levels=levels; 


    } 

    @Override 
    public View getDropDownView(int position, View convertView, ViewGroup parent) { 



     if(convertView==null){ 

      LayoutInflater inflater=(LayoutInflater) c.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
      convertView=inflater.inflate(R.layout.spinner_building_to_upgrade,null); 
     } 

     TextView tx=(TextView) convertView.findViewById(R.id.levelNumber); 
     ImageView image=(ImageView)convertView.findViewById(R.id.imageid); 

     //SET DATA 
     // if (levels.length > position) { 
      tx.setText(levels[position]); 
    // } 
    // if (images.length > position) { 
      image.setImageResource(images[position]); 
    // } 
//  tx.setText(levels[position]); 
//  image.setImageResource(images[position]); 




     return convertView; 
    } 

    @NonNull 
    @Override 
    public View getView(int position, View convertView, ViewGroup parent) { 
     if(convertView==null){ 

      LayoutInflater inflater=(LayoutInflater) c.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
      convertView=inflater.inflate(R.layout.spinner_building_to_upgrade,null); 
     } 

     TextView tx=(TextView) convertView.findViewById(R.id.levelNumber); 
     ImageView image=(ImageView)convertView.findViewById(R.id.imageid); 

     //SET DATA 

     // if (levels.length > position) { 
      tx.setText(levels[position]); 
    // } 
    // if (images.length > position) { 
      image.setImageResource(images[position]); 
    // } 
//  tx.setText(levels[position]); 
//  image.setImageResource(images[position]); 



     return convertView; 
    } 

    @Override 
    public int getItemViewType(int position) { 



     return super.getItemViewType(position); 
    } 
} 

Пожалуйста, предоставьте мне решение с кодом, чтобы исправить это. Раньше этот адаптер работал нормально. Благодаря

Edit: Это, как я передаю значения к адаптеру

public class AirSweeperActivity extends AppCompatActivity { 


    static int airSweeperLevelOne=22500; 
    static int airSweeperLevelTwo=90000; 
    static int airSweeperLevelThree=270000; 
    static int airSweeperLevelFour=540000; 
    static int airSweeperLevelFive=1080000; 
    static int airSweeperLevelSix=2160000; 


    int sp1AirSweeperUpgradeCost; 
    int sp2AirSweeperUpgradeCost; 

    long totalAirSweeperUpgradeCost; 


    Spinner sp1; 
    Spinner sp2; 

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

      }; 
    int[] images={ 
      R.drawable.air_sweeper1, 
      R.drawable.air_sweeper2, 
      R.drawable.air_sweeper3, 
      R.drawable.air_sweeper4, 
      R.drawable.air_sweeper5, 
      R.drawable.air_sweeper6, 

    }; 



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

     sbmt = (Button) findViewById(R.id.submit); 
     tx = (TextView) findViewById(R.id.upgradeResult); 
     sp1 = (Spinner) findViewById(R.id.spinner); 
     sp2 = (Spinner) findViewById(R.id.spinner1); 

     SpinnerAdapterAirSweeper adapter = new SpinnerAdapterAirSweeper(this, levels, images); 
     sp1.setAdapter(adapter); 
     sp2.setAdapter(adapter); 


      sp1.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() { 
       @Override 
       public void onItemSelected(AdapterView<?> parent, View view, int position, long id) { 
        SharedPreferences sharedPreferences = getSharedPreferences("your_prefs", Activity.MODE_PRIVATE); 
        SharedPreferences.Editor editor = sharedPreferences.edit(); 


        prefs.edit().putInt("spinner1_indx", sp1.getSelectedItemPosition()).apply(); //TO RETRIEVE SPINNER 1 ON RESUME 

        switch (position) { 

         case 0: 


          sp1AirSweeperUpgradeCost = (airSweeperLevelTwo + airSweeperLevelThree + airSweeperLevelFour + airSweeperLevelFive + 
            airSweeperLevelSix); 

          editor.putInt("sp1_Air_Defence", sp1AirSweeperUpgradeCost); 
          editor.apply(); 


          break; 
         case 1: 


          sp1AirSweeperUpgradeCost = (airSweeperLevelThree + airSweeperLevelFour + airSweeperLevelFive + 
            airSweeperLevelSix); 

          editor.putInt("sp1_Air_Defence", sp1AirSweeperUpgradeCost); 
          editor.apply(); 
          break; 

         case 2: 

          sp1AirSweeperUpgradeCost = (airSweeperLevelFour + airSweeperLevelFive + 
            airSweeperLevelSix); 
          editor.putInt("sp1_Air_Defence", sp1AirSweeperUpgradeCost); 
          editor.apply(); 

          break; 


         case 3: 

          sp1AirSweeperUpgradeCost = (airSweeperLevelFive + 
            airSweeperLevelSix); 
          editor.putInt("sp1_Air_Defence", sp1AirSweeperUpgradeCost); 
          editor.apply(); 
          break; 

         case 4: 

          sp1AirSweeperUpgradeCost = (
            airSweeperLevelSix); 
          editor.putInt("sp1_Air_Defence", sp1AirSweeperUpgradeCost); 
          editor.apply(); 
          break; 


         case 5: 

          sp1AirSweeperUpgradeCost = (0); 
          editor.putInt("sp1_Air_Defence", sp1AirSweeperUpgradeCost); 
          editor.apply(); 
          break; 


        } 

       } 

       @Override 
       public void onNothingSelected(AdapterView<?> parent) { 

       } 
      }); 
+0

добавить код, как вы передаете значение адаптер –

+0

Проверьте мой выбор @santoshkumar –

+0

код выглядит тонкий чистый сборка н чека. Адаптер –

ответ

0

Это не о ценности попробовать это. Вы добавили дополнительные запятые здесь

String levels[]={"Level 1", 
      "Level 2", 
      "Level 3", 
      "Level 4", 
      "Level 5", 
      "Level 6" 

      }; 
    int[] images={ 
      R.drawable.air_sweeper1, 
      R.drawable.air_sweeper2, 
      R.drawable.air_sweeper3, 
      R.drawable.air_sweeper4, 
      R.drawable.air_sweeper5, 
      R.drawable.air_sweeper6 

    }; 
+0

Я пробовал, но не повезло. –

Смежные вопросы