首页 > 解决方案 > 在android studio java中向另一个活动发送意图时,有效地将多个项目添加到arraylist对象以避免越界异常

问题描述

我正在尝试找到一种方法来有效地将多个 add 语句添加到对象的数组列表中。

例如:

在我的 MainActivity (精简版)中,我添加到汽车对象的数组中,有很多:

public class MainActivity extends AppCompatActivity {

   ArrayList<Car> imagesArray = new ArrayList<>();


   @Override
   protected void onCreate(Bundle savedInstanceState) {

    imagesArray.add(new Car(0,"alpha", "", R.mipmap.alpha));
    imagesArray.add(new Car(1,"audi", "", R.mipmap.audi));
    imagesArray.add(new Car(2,"bentley", "", R.mipmap.bentley));
    imagesArray.add(new Car(3,"bmw", "", R.mipmap.bmw));
    imagesArray.add(new Car(4,"bugatti", "", R.mipmap.bugatti));
    imagesArray.add(new Car(5,"ferrari", "", R.mipmap.ferrari));
    imagesArray.add(new Car(6,"ford", "", R.mipmap.ford));
    imagesArray.add(new Car(7,"honda", "", R.mipmap.honda));
    imagesArray.add(new Car(8,"hyundai", "", R.mipmap.hyundai));
    imagesArray.add(new Car(9,"jaguar", "", R.mipmap.jaguar));
    imagesArray.add(new Car(10,"jeep", "", R.mipmap.jeep));
    imagesArray.add(new Car(11,"lamborghini", "", R.mipmap.lamborghini));
    imagesArray.add(new Car(12,"maserati", "", R.mipmap.maserati));
    imagesArray.add(new Car(13,"mazda", "", R.mipmap.mazda));
    imagesArray.add(new Car(14,"mercedes", "", R.mipmap.mercedes));
    imagesArray.add(new Car(15,"mini", "", R.mipmap.mini));
    imagesArray.add(new Car(16,"mustang", "", R.mipmap.mustang));
    imagesArray.add(new Car(17,"nissan", "", R.mipmap.nissan));
    imagesArray.add(new Car(18,"pagani", "", R.mipmap.pagani));
    imagesArray.add(new Car(19,"porsche", "", R.mipmap.porsche));
    imagesArray.add(new Car(20,"rangerover", "", R.mipmap.rangerover));
    imagesArray.add(new Car(21,"renault", "", R.mipmap.renault));
    imagesArray.add(new Car(22,"rollsroyce", "", R.mipmap.rollsroyce));
    imagesArray.add(new Car(23,"seat", "", R.mipmap.seat));
    imagesArray.add(new Car(24,"skoda", "", R.mipmap.skoda));
    imagesArray.add(new Car(25,"subaru", "", R.mipmap.subaru));
    imagesArray.add(new Car(26,"suzuki", "", R.mipmap.suzuki));
    imagesArray.add(new Car(27,"tesla", "", R.mipmap.tesla));
    imagesArray.add(new Car(29,"toyota", "", R.mipmap.toyota));
    imagesArray.add(new Car(30,"volvo", "", R.mipmap.volvo));
    imagesArray.add(new Car(31,"vw", "", R.mipmap.vw));

    Button btnHints = (Button) findViewById(R.id.hints);


    btnHints.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {

            Log.i("Home Screen","Hints Clicked.");
            openHintsActivity();

        }
    });

 }

   public void openHintsActivity() {

    Intent intent = new Intent(this, Hints.class);
    intent.putExtra("imagesArray", imagesArray);
    startActivity(intent);

  }

这是汽车对象:

public class Car implements Serializable {

int id;
String make;
String model;
int mipmap;

public Car(int id,String make, String model, int mipmap) {
    this.id = id;
    this.make = make;
    this.model = model;
    this.mipmap = mipmap;
}

//Getters and setters etc. below

问题是有时我将意图传递给另一个活动时出现越界异常,我猜这可能与数组的大小有关?

我有一种感觉,有时会发生这种情况,因为当应用程序启动时,并非所有图像都在用户进入另一个活动之前添加,所以 imagesArray 的整个意图不完整?

由于 imagesArray 用于应用程序的其他功能。

所以我的问题是,在将大量数据添加到数组列表然后作为意图传递时,如何最好地有效地解决这个越界问题?有更好的解决方案吗?

谢谢你的建议。

这里使用数组:

public class Hints extends AppCompatActivity {

StringBuilder temp;
int noOfAttempts = 0;
ArrayList<Car> imagesArray;


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

    imagesArray = (ArrayList<Car>)getIntent().getSerializableExtra("imagesArray");

    Collections.shuffle(imagesArray); //Randomizes array

    ImageView imageView = (ImageView) findViewById(R.id.imgRandom);

    final int randomMake = imagesArray.get(0).getId();
    imageView.setImageResource(imagesArray.get(randomMake).getMipmap());

标签: javaandroidandroid-studioarraylistindexoutofboundsexception

解决方案


我不确定这是否可行,但您可以使用 if 语句来检查 randomMake 变量是否大于数组长度,然后只使用数组长度作为索引。您还可以对 indexOutOfBounds 异常使用 try catch 块,然后只使用数组长度作为索引。

*我知道它被称为arrayList,但是当我阅读它时,array 听起来更好。


推荐阅读