IndexOutOfBoundsException:索引0无效,大小为0 - 将地址数组转换为latlng

时间:2016-12-08 05:05:28

标签: android arrays

我正在尝试将一个地址数组转换为latlng并且它给出了一个错误说越界,但是我在我的logcat上检查了它并且所有的地址都存在,这意味着它不是空的。

错误:

java.lang.IndexOutOfBoundsException: Invalid index 0, size is 0
12-08 12:39:57.160 15521-15521/homeseek.app.android.capstonehomeseek W/System.err:     at java.util.ArrayList.throwIndexOutOfBoundsException(ArrayList.java:255)
12-08 12:39:57.160 15521-15521/homeseek.app.android.capstonehomeseek W/System.err:     at java.util.ArrayList.get(ArrayList.java:308)
12-08 12:39:57.160 15521-15521/homeseek.app.android.capstonehomeseek W/System.err:     at homeseek.app.android.capstonehomeseek.ListingNearbyResults.getLocationFromAddress(ListingNearbyResults.java:425)
12-08 12:39:57.160 15521-15521/homeseek.app.android.capstonehomeseek W/System.err:     at homeseek.app.android.capstonehomeseek.ListingNearbyResults.jsonDetails(ListingNearbyResults.java:238)
12-08 12:39:57.160 15521-15521/homeseek.app.android.capstonehomeseek W/System.err:     at homeseek.app.android.capstonehomeseek.ListingNearbyResults.access$000(ListingNearbyResults.java:65)
12-08 12:39:57.160 15521-15521/homeseek.app.android.capstonehomeseek W/System.err:     at homeseek.app.android.capstonehomeseek.ListingNearbyResults$1.onResponse(ListingNearbyResults.java:199)
12-08 12:39:57.160 15521-15521/homeseek.app.android.capstonehomeseek W/System.err:     at homeseek.app.android.capstonehomeseek.ListingNearbyResults$1.onResponse(ListingNearbyResults.java:196)

数组值:

  

{&#34;列出&#34;:[{&#34; PROPERTY_ID&#34;:&#34; 1&#34;&#34; PROPERTY_NAME&#34;:&#34; HOTD&#34; &#34;房产类型&#34;:&#34;局   房子&#34;&#34;术语&#34;:&#34;每月&#34;&#34;城市&#34;:&#34;达沃&#34;&#34;的地址< / strong>&#34;:&#34; 337 monteverde st,   达沃   城市&#34;&#34; lot_area&#34;:&#34;&#34;&#34; floor_area&#34;:&#34;&#34;&#34;价&#34;:&#34; 2000&#34;&#34;卧室&#34;:&#34; 1&#34;&#34;浴室&#34;:&#34; 1&#34 ;, &#34; HOST_NAME&#34;:&#34; jords&#34;&#34; host_contact_no&#34;:&#34; 09457642546&#34;&#34; host_details&#34;:&#34; heeididudbeksdidh& #34;&#34; date_listed&#34;:&#34; 2016年12月6日&#34;},{&#34; PROPERTY_ID&#34;:&#34; 2&#34;&#34; PROPERTY_NAME&#34;:&#34;唐   洛伦佐   公寓&#34;&#34;房产类型&#34;:&#34;家&#34;&#34;长期&#34;:&#34;周刊&#34;&#34;城市&#34 ;: &#34;达沃&#34;&#34;地址&#34;:的&#34;圣   Luanzo村,Puan Davao   市&#34; 下,&#34; lot_area&#34;:&#34;&#34;&#34; floor_area&#34;:&#34;&#34;&#34;价格& #34;:&#34; 25000&#34;&#34;卧室&#34;:&#34; 1&#34;&#34;浴室&#34;:&#34; 1&#34;,& #34; HOST_NAME&#34;:&#34; Glordel   Capidos&#34;,&#34; host_contact_no&#34;:&#34; 09123456789&#34;,&#34; host_details&#34;:&#34;只需联系   以上数字更多   的相关信息&#34;&#34; date_listed&#34;:&#34; 2016年12月6日&#34;},{&#34; PROPERTY_ID&#34;:&#34; 3&#34;&#34 ; PROPERTY_NAME&#34;:&#34;样品&#34;&#34;房产类型&#34;:&#34;局   房子&#34;&#34;术语&#34;:&#34;每月&#34;&#34;城市&#34;:&#34;达沃&#34;&#34;的地址< / strong>&#34;:&#34; 377 monteverde st,   达沃   城市&#34;&#34; lot_area&#34;:&#34;&#34;&#34; floor_area&#34;:&#34;&#34;&#34;价&#34;:&#34; 2000&#34;&#34;卧室&#34;:&#34; 2&#34;&#34;浴室&#34;:&#34; 2&#34 ;, &#34; HOST_NAME&#34;:&#34; jords&#34;&#34; host_contact_no&#34;:&#34; 0910987263&#34;&#34; host_details&#34;:&#34;样品#34;&#34; date_listed&#34;:&#34; 2016年12月6日&#34;}],&#34; hasData&#34;:真}

这里是我发现错误的代码部分:

public LatLng getLocationFromAddress(Context context,String strAddress) {

        Geocoder coder = new Geocoder(context);
        List<Address> address;
        LatLng p1 = null;

        try {
            address = coder.getFromLocationName(strAddress, 5);
            if (address == null) {
                return null;
            }
            Address location = address.get(0);
            location.getLatitude();
            location.getLongitude();

            p1 = new LatLng(location.getLatitude(), location.getLongitude() );

        } catch (Exception ex) {

            ex.printStackTrace();
        }

        return p1;
    }
  

地址位置= address.get(0);

这是我使用方法getlocationfromAddress();

的地方
if(hasData){
                Toast.makeText(getApplicationContext(), arrayResponse.length() + " properties found.", Toast.LENGTH_SHORT).show();
                for(int x = 0; x < arrayResponse.length(); x++) {
                    JSONObject jsonObject = arrayResponse.getJSONObject(x);
                    property_id[x] = jsonObject.getString("property_id");
                    property_name[x] = jsonObject.getString("property_name");
                    type[x] = jsonObject.getString("property_type");
                    price[x] = jsonObject.getString("price");
                    address[x] = jsonObject.getString("address");

                    LatLng latLng = getLocationFromAddress(this, address[x]);
                    latitude = latLng.latitude;
                    longitude = latLng.longitude;

                    locationA = new Location("point A");

                    locationA.setLatitude(mLat);
                    locationA.setLongitude(mLng);

                    locationB = new Location("point B");

                    locationB.setLatitude(latitude);
                    locationB.setLongitude(longitude);

                    double listingDistance = locationA.distanceTo(locationB) / 1000;
                    distance[x] = Math.round(listingDistance);

                }

请帮助谢谢

1 个答案:

答案 0 :(得分:0)

不是直接使用数组,而是先将值存储在String变量中,之后将它们存储在Arraylist中,然后再使用它们,

像这样,

List<String> property=new ArrayList<>();

现在进入循环。

String property_id=jsonObject.getString("property_id");
property.add(property_id);