【发布时间】:2017-06-27 22:25:04
【问题描述】:
在这个函数中,当我使用 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)
【问题讨论】:
-
尝试将
i++移到 if/else 块之外 -
添加错误日志或添加有关发生错误的行的详细信息