无法启动活动ComponentInfo IndexOutOfBoundsException无效的索引0,大小为0

时间:2018-07-20 14:01:20

标签: android google-maps debugging indexoutofboundsexception

我的代码显示了logcat超出范围0的索引0大小的异常错误。 当我打开此活动时,应用程序崩溃。我不知道这是什么问题,请帮助我解决此问题。谢谢 这是显示用户位置的google地图

getEntry

我认为这是问题,但我不知道此功能的作用。

@Override
public void onCreate(@Nullable Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.fragment_map);
    initCompnent();
    showBannerAd();
    if(mMapView!=null){
        mMapView.onCreate(null);
        mMapView.onResume();
        mMapView.getMapAsync(this);
    }

    Intent i = getIntent();
    getNumber =i.getStringExtra("number");
    getLocation =i.getStringExtra("location");
    Log.e("location data",getLocation);
    getCounty= i.getStringExtra("country");
    Geocoder gc = new Geocoder(this);
    try {
        List<Address> list = gc.getFromLocationName(getLocation, 1);
        Address add = list.get(0);
        latt = add.getLatitude();
        lon = add.getLongitude();


        if(getLocation.equals("null")) {
            //country lat long
            List<Address> list1 = gc.getFromLocationName(getCounty, 1);
            Address add1 = list1.get(0);
            latt = add1.getLatitude();
            lon = add1.getLongitude();

        }


    } catch (IOException e) {
        e.printStackTrace();
    }

}


public void initCompnent() {
    mBannerAd= (AdView) findViewById(R.id.banner_AdView_m);
    mMapView = (MapView) findViewById(R.id.map);
    String android_id = Settings.Secure.getString(this.getContentResolver(), Settings.Secure.ANDROID_ID);
    mDeviceId=md5(android_id);
}
private void showBannerAd() {
    AdRequest adRequest = new AdRequest.Builder()
            .addTestDevice(mDeviceId)
            .build();
    mBannerAd.loadAd(adRequest);

}

这是地图功能

public String md5(String s) {
    try {
        // Create MD5 Hash
        MessageDigest digest = java.security.MessageDigest.getInstance("MD5");
        digest.update(s.getBytes());
        byte messageDigest[] = digest.digest();

        // Create Hex String
        StringBuffer hexString = new StringBuffer();
        for (int i=0; i<messageDigest.length; i++)
            hexString.append(Integer.toHexString(0xFF & messageDigest[i]));
        return hexString.toString();

    } catch (NoSuchAlgorithmException e) {
        e.printStackTrace();
    }
    return "";
}

2 个答案:

答案 0 :(得分:0)

您的问题很可能在一行中

Address add = list.get(0);

Address add1 = list1.get(0);

在两个列表中,您都尝试获取第一个(第0个)元素,而不检查列表中是否确实有任何元素。您应该在使用列表之前使用

检查列表是否为空
if(!list.isEmpty())

作为Tomer Shemesh的旁注,您执行的空检查也显得很虚假。首先,您可能想改为检查getLocation == null。其次,您可能想先尝试进行检查,然后再尝试使用getLocation字符串。

答案 1 :(得分:0)

我能够通过更新API并添加对!list.isempty的检查来解决此问题。谢谢