java - 在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());
解决方案
我不确定这是否可行,但您可以使用 if 语句来检查 randomMake 变量是否大于数组长度,然后只使用数组长度作为索引。您还可以对 indexOutOfBounds 异常使用 try catch 块,然后只使用数组长度作为索引。
*我知道它被称为arrayList,但是当我阅读它时,array 听起来更好。
推荐阅读
- angular - 在 Angular CLI 中导入 javascript var
- java - 在java中调用方法后代码如何工作?
- java - 共享元素转换未正确退出
- javascript - Angular:通过 contenteditable 绑定到父级的子级
- php - Eloquent Route 隐式绑定 Laravel 5.6 不起作用
- facebook - Firebase:用户的 facebook 头像照片在最近更新后返回“URL 签名已过期”
- r - 在 R 上创建一个新变量
- angular5 - rangeFilter 添加不需要的列 ng2-google-charts
- tensorflow - 如何重用经过训练的模型来执行分类 - Tensorflow
- jquery - 在jquery中调整字体大小