在这个函数中,当我使用 For..Loop 时,无限循环,当我使用 While..Loop 时,我得到了错误: IndexOutOfBoundsException 。我想要做的是将元素从 imageInfosArrayList 中复制到 restrictedAreaArrayList 中,这里是代码:
@Override
public void onLocationChanged(Location location) {
//Toast.makeText(this,"Location changed!! wait for coordiates update",Toast.LENGTH_LONG).show();
mLocation=location;
latitudeMe=mLocation.getLatitude();
longitudeMe=mLocation.getLongitude();
Log.i(TAG,String.valueOf(latitudeMe+","+longitudeMe));
getMyLocations(latitudeMe,longitudeMe);
//getLocations("München Flughafen");
Log.i(TAG,"Ziel coordinates "+String.valueOf(latitudeZiel+","+latitudeZiel));
// for (int i = 0; i < imageInfosArrayList.size(); i++) {
int i=0;
while(i<imageInfosArrayList.size()){
Log.e(TAG,imageInfosArrayList.toString());
LatLng hier = getLocations(imageInfosArrayList.get(i).getPlace());
if (hier != null) {
Log.i(TAG, imageInfosArrayList.get(i).getPlace());
distanceGeo = distance(hier.latitude, hier.longitude);
ImageInfos imageInfos= new ImageInfos(mContext);
if (distanceGeo <= Float.valueOf(distance[0])) {
imageInfos= imageInfosArrayList.get(i);
restrictedAreaArrayList.add(i,imageInfos);
Log.e(TAG, "restrictedarea filling..." + restrictedAreaArrayList.size());
i++;
}
} else {
Log.i(TAG, "Can't locate this adress..." + imageInfosArrayList.get(i).getPlace());
i++;
}
}
}
这是Logcat:
com.historyimages E/AndroidRuntime: FATAL EXCEPTION: main
Process: bayram.com.historyimages, PID: 9792
java.lang.IndexOutOfBoundsException: Index: 4, Size: 2
at java.util.ArrayList.add(ArrayList.java:457)
at bayram.com.historyimages.Umgebung.UmgebungFragment.onLocationChanged(UmgebungFragment.java:394)
at com.google.android.gms.internal.zzasg$zzb$1.zza(Unknown Source)
at com.google.android.gms.internal.zzasg$zzb$1.zzs(Unknown Source)
at com.google.android.gms.internal.zzabh.zzb(Unknown Source)
at com.google.android.gms.internal.zzabh$zza.handleMessage(Unknown Source)
at android.os.Handler.dispatchMessage(Handler.java:105)
at android.os.Looper.loop(Looper.java:156)
at android.app.ActivityThread.main(ActivityThread.java:6524)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:941)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:831)
答案 0 :(得分:0)
好吧,我们没有for循环示例的代码,但我怀疑它在while循环中包含类似的错误。
你的循环,简化如下:
int i = 0;
while (i < size_of_x) {
y = getlocations(h.get(i));
if (y != null) {
do_something()
i++;
}
else {
i++;
}
}
让我们想象一下,h只有2个元素,所以get(0)和get(1)会起作用,但get(2)会失败。您的循环运行时具有以下行为:
我猜测你的for循环版本与你发布的代码有更多的差异,但可能会无限地运行#34;因为像getlocations()调用那样没有成功,你的终止条件并不令人满意。
您需要重新考虑您在循环中所做的事情,特别是如果您正在进行可能失败的函数调用。您还应该练习我上面描述的练习,遍历您的代码,并检查循环中的行为是否与您期望或想要的一致。
答案 1 :(得分:0)
您在IndexOutOfBoundsException
上获得restrictedAreaArrayList
,
您正在添加imageInfos
restrictedAreaArrayList
与
restrictedAreaArrayList.add(i,imageInfos);
索引可能不存在于restrictedAreaArrayList
中,您只需添加
restrictedAreaArrayList.add(imageInfos)
或者如果你想保留订单,那么使restrictedAreaArrayList的大小等于imageInfosArrayList
你可以用
restrictedAreaArrayList = new ArrayList<ImageInfos>(imageInfosArrayList.size());
或者
你可以打电话
restrictedAreaArrayList.ensureCapacity(imageInfosArrayList.size())
确保其容量与imageInfosArrayList