有效地将多个项目添加到 arraylist 对象以避免在向 android studio java 中的另一个 activity 发送意图时出现越界异常

Efficiently add multiple items to arraylist object to avoid out of bounds exception when sending intent to another activity in android studio java

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

例如:

在我的 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

问题是每当我将意图传递给另一个 activity 时,有时我会遇到越界异常,我猜这可能与数组的大小有关?

我觉得有时会发生这种情况,因为当应用程序启动时,并不是所有图像都在用户进入另一个图像之前添加 activity 所以 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());

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

*我知道它叫 arrayList,但是当我读它时,array 听起来更好。

在您的提示中Activity更改

    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());

imagesArray = (ArrayList<Car>)getIntent().getSerializableExtra("imagesArray");
Random random = new Randome();
final int randomMake = random.nextInt(imagesArray.size());
imageView.setImageResource(imagesArray.get(randomMake).getMipmap());

确保您得到的数字没有高于数组