-1

使用12-14项目加载时,相同的适配器可以正常工作,但在加载少于10项时会出错。ArrayIndexOutOfBoundsException将项目保存在自定义适配器中

它导致当我输入6 items = 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); 
    } 
} 

请给我提供一个解决方案和一个代码来解决这个问题。此适配器早期工作正常。由于

编辑: 我这是如何将值传递给适配器

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

代码看起来不错干净生成N检查。 –

回答

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

我试过,但没有运气。 –

相关问题