我想在android按钮中使用onClick
方法,但它无法正常工作。另一方面,当我使用onClickListener
时,它会向我显示另一个错误,如
java.lang.IndexOutOfBoundsException:索引0无效,大小为0
我无法找到它的问题。
Java代码如下:
public void onSearch(View view) throws IOException{
EditText sLocation = (EditText) view.findViewById(R.id.editText1);
String location = sLocation.getText().toString();
List<android.location.Address> addressList= null;
if (location != null || !location.equals(""))
{
Geocoder geocoder = new Geocoder(getActivity().getApplicationContext());
try {
addressList = geocoder.getFromLocationName(location, 1);
} catch (IOException e) {
e.printStackTrace();
}
android.location.Address address = addressList.get(0);
LatLng latlng = new LatLng(address.getLatitude(),address.getLatitude());
gMap.addMarker(new MarkerOptions().position(latlng).title("Marker"));
gMap.animateCamera(CameraUpdateFactory.newLatLng(latlng));
}
}
add_masjid.xml
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical"
android:background="#000000">
<TextView
android:id="@+id/textView1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignBaseline="@+id/editText1"
android:layout_alignBottom="@+id/editText1"
android:layout_alignParentStart="true"
android:text="@string/xyz"
android:textColor="#FFFFFF"
android:textSize="20sp"
/>
<Button
android:id="@+id/generalId"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentEnd="true"
android:layout_alignParentTop="true"
android:background="@drawable/rect1"
android:onClick="onSearch"
android:text="@string/abc"
android:textColor="#FFFFFF"
android:textSize="20sp"
android:clickable="true" />
<EditText
android:id="@+id/editText1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_toEndOf="@+id/textView1"
android:layout_toStartOf="@+id/generalId"
android:ems="10"
android:inputType="text"
android:background="#FFFFFF"
android:labelFor="@+id/editText1"
android:layout_above="@+id/map"
android:layout_alignParentTop="true" />
<com.google.android.gms.maps.MapView
android:id="@+id/map"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_below="@+id/generalId">
</com.google.android.gms.maps.MapView>
</RelativeLayout>
答案 0 :(得分:0)
检查您的addressList
。它可能是空的。这就是你得到的原因
java.lang.IndexOutOfBoundsException:索引0无效,大小为0
答案 1 :(得分:0)
onClick
方法与问题无关。来自getFromLocationName
的文档:
[...]如果未找到匹配项,则返回null或空列表 没有后端服务。
因此,您可能也会获得NPE。执行null
和空洞检查以避免此类错误。
样本解决方案:
public void onSearch(View view) throws IOException {
EditText sLocation = (EditText) view.findViewById(R.id.editText1);
String location = sLocation.getText().toString();
List<android.location.Address> addressList = null;
if (location != null || !location.equals("")) {
Geocoder geocoder = new Geocoder(getActivity().getApplicationContext());
try {
addressList = geocoder.getFromLocationName(location, 1);
if (addressList != null && !addressList.isEmpty()) {
android.location.Address address = addressList.get(0);
LatLng latlng = new LatLng(address.getLatitude(), address.getLatitude());
gMap.addMarker(new MarkerOptions().position(latlng).title("Marker"));
gMap.animateCamera(CameraUpdateFactory.newLatLng(latlng));
} else {
Toast.makeText(getActivity(), "Failed to resolve address", Toast.LENGTH_SHORT).show();
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
注意:此代码会阻塞,直到getFromLocationName
方法返回。在主线程上这样做是个坏主意。