应用程序崩溃,因为我正在 ArrayList 中搜索不存在的索引.我该如何解决它?



我已经阅读了所有关于IOExceptions的文档,以及它们在生成时的含义。我知道我正在我的 ArrayList 中搜索不存在的 en 索引,从而产生IndexOutOfBoundsException: Index: 0, Size: 0.我已经查阅了以下文档和帖子,以尝试自己处理问题,但没有成功。在做了这个彻底的研究之后,我希望有人可以帮助我解决这个问题。我已经合法地浏览了许多类似类型问题的帖子,以单独尝试解决我的错误,但无法得出正确的结论。

是什么导致了java.lang.ArrayIndexOutOfBoundsException,我该如何防止它?. https://docs.oracle.com/javase/tutorial/essential/exceptions/throwing.html

例如,我尝试在addressList周围放置 enif语句,并toast一条消息警告用户他们必须优化搜索。在地图上搜索大多数地点时,结果会很好,并且在地图上的特定位置放置了一个标记。不过,当我搜索巴黎时,我得到了例外,就像我说的那样,我已经将其包装在if语句和其他方法中,但没有成功。

searchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() {
@Override
public boolean onQueryTextSubmit(String query) {
String location = searchView.getQuery().toString();
List<Address> addressList = null;
if (location != null || !location.equals("")) {
Geocoder geocoder = new Geocoder(MapsActivityPublisher.this);
try {
addressList = geocoder.getFromLocationName(location, 1);
} catch (IOException e) {
e.printStackTrace();
}
Address address = addressList.get(0);
LatLng latLng = new LatLng(address.getLatitude(), address.getLongitude());
map.addMarker(new MarkerOptions().position(latLng).title(location).draggable(true));
map.animateCamera(CameraUpdateFactory.newLatLngZoom(latLng, 10));
}
return false;
}
@Override
public boolean onQueryTextChange(String newText) {
return false;
}
});

日志猫

java.lang.IndexOutOfBoundsException: Index: 0, Size: 0
at java.util.ArrayList.get(ArrayList.java:437)
at com.e.events.Map.MapsActivityPublisher$1.onQueryTextSubmit(MapsActivityPublisher.java:62)
at android.widget.SearchView.onSubmitQuery(SearchView.java:1270)
at android.widget.SearchView.access$1000(SearchView.java:99)
at android.widget.SearchView$7.onEditorAction(SearchView.java:1247)
at android.widget.TextView.onEditorAction(TextView.java:6453)
at com.android.internal.widget.EditableInputConnection.performEditorAction(EditableInputConnection.java:138)
at com.android.internal.view.IInputConnectionWrapper.executeMessage(IInputConnectionWrapper.java:363)
at com.android.internal.view.IInputConnectionWrapper$MyHandler.handleMessage(IInputConnectionWrapper.java:85)
at android.os.Handler.dispatchMessage(Handler.java:112)
at android.os.Looper.loop(Looper.java:216)
at android.app.ActivityThread.main(ActivityThread.java:7625)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:524)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:987)

在从ArrayList获取数据之前检查nullempty

if (location != null && !location.equals("")) {
Geocoder geocoder = new Geocoder(MapsActivityPublisher.this);
try {
addressList = geocoder.getFromLocationName(location, 1);
} catch (IOException e) {
e.printStackTrace();
}
if(addressList != null && !addressList.isEmpty()) {
Address address = addressList.get(0);
LatLng latLng = new LatLng(address.getLatitude(), address.getLongitude());
map.addMarker(new MarkerOptions().position(latLng).title(location).draggable(true));
map.animateCamera(CameraUpdateFactory.newLatLngZoom(latLng, 10));
}
}

最新更新