Android IndexOutOfBoundsExecption错误

Android IndexOutOfBoundsExecption错误,android,arraylist,Android,Arraylist,在我的程序中,我有一个SQLite,它在我的应用程序中存储谷歌地图的GPS坐标。 我试图检索纬度和经度并将它们存储在arrayList中,但在运行程序时,程序抛出indexOutOfBoundsException。我模糊地理解这意味着当我试图从arrayList中检索项目时,arrayList中没有任何内容,但是如果我错了,请纠正我 LogCat 类“DatabaseHandler.class”中的原始查询 类“UserFunction.Class” 你写道: if (cursor.mo

在我的程序中,我有一个SQLite,它在我的应用程序中存储谷歌地图的GPS坐标。 我试图检索纬度和经度并将它们存储在arrayList中,但在运行程序时,程序抛出indexOutOfBoundsException。我模糊地理解这意味着当我试图从arrayList中检索项目时,arrayList中没有任何内容,但是如果我错了,请纠正我

LogCat

类“DatabaseHandler.class”中的原始查询

类“UserFunction.Class”

你写道:

    if (cursor.moveToFirst()){
           lat = cursor.getString(cursor.getColumnIndex("lat"));
           lng = cursor.getString(cursor.getColumnIndex("lng"));
           cordarr.add(lat);
           cordarr.add(lng);
     }
但是您必须将光标安全地设置到第一个位置,或者如果光标位于第一个位置,您真的只想获取数据吗?如果没有,请致电

        cursor.moveToFirst();
然后获取数据,但在if子句中:

          if (cursor.moveToFirst()){
    lat = cursor.getString(cursor.getColumnIndex("lat"));
    lng = cursor.getString(cursor.getColumnIndex("lng"));
    cordarr.add(lat);
    cordarr.add(lng);

     cursor.moveToNext(); //call this, so the cursor goes to the next
}  

尝试迭代光标

if(cursor!=null)
 {
    cursor.moveToFirst();
    do {
    lat = cursor.getString(cursor.getColumnIndex("lat"));
    lng = cursor.getString(cursor.getColumnIndex("lng"));
    cordarr.add(lat);
    cordarr.add(lng);
   }while(cursor.moveToNext()); //It will move to next value.
  } 

这里应该有空检查

    public ArrayList<String> getCoords(Context context, String lat, String lng) {
        DatabaseHandler db = new DatabaseHandler(context);
        Cursor cursor = db.getLatLng();
        if (cursor !null && cursor.moveToFirst()){
              ArrayList<String> cordarr = new ArrayList<String>();
            lat = cursor.getString(cursor.getColumnIndex("lat"));
            lng = cursor.getString(cursor.getColumnIndex("lng"));
            cordarr.add(lat);
            cordarr.add(lng);
            return cordarr;
        }
    cursor.close();
    db.close();
    return null;
    }
public ArrayList getCoords(上下文上下文、字符串lat、字符串lng){
DatabaseHandler db=新的DatabaseHandler(上下文);
Cursor=db.getLatLng();
if(cursor!null&&cursor.moveToFirst()){
ArrayList cordarr=新的ArrayList();
lat=cursor.getString(cursor.getColumnIndex(“lat”));
lng=cursor.getString(cursor.getColumnIndex(“lng”));
cordarr.add(横向);
cordarr.add(液化天然气);
返回cordarr;
}
cursor.close();
db.close();
返回null;
}
这里也一样

    UserFunctions userFunc = new UserFunctions();
    ArrayList<String> cordarr = new ArrayList<String>();
    cordarr = userFunc.getCoords(getApplicationContext(), Lat1, Lng1);
    if(cordarr != null && cordarr.size() > 1) {
    Log.d("LOG","have got lat long to show.")
    Lat1 = cordarr.get(0);
    Lng1 = cordarr.get(1);
    lat = goDouble(Lat1);
    lng  = goDouble(Lng1);
    LatLng sala = new LatLng(lat, lng); 
    } else {
        Log.d("LOG","no lat long found")
    }
UserFunctions userFunc=newuserfunctions();
ArrayList cordarr=新的ArrayList();
cordarr=userFunc.getCoords(getApplicationContext(),Lat1,Lng1);
if(cordarr!=null&&cordarr.size()>1){
Log.d(“Log”,“有很长的时间要显示。”)
Lat1=cordarr.get(0);
Lng1=cordarr.get(1);
lat=goDouble(Lat1);
lng=goDouble(Lng1);
LatLng sala=新LatLng(lat,lng);
}否则{
Log.d(“日志”,“未找到lat long”)
}

你能试试这个,让我看看你得到了什么日志吗

你确定你的光标不是空的吗..很好,为什么需要调用moveToFirst()方法两次?如果它自己尝试了这一点,并且给出了相同的错误,那么它在这种情况下会工作吗。我还尝试将
cursor.moveToFirst
设置在If之前,然后
If(cursor!=null){lat=cursor.getString(cursor.getColumnIndex(“lat”);lng=cursor.getString(cursor.getColumnIndex(“lng”);cordarr.add(lat);cordarr.add(lng);cursor.moveToNext();
并且它给出了相同的错误。好的,那么,您确定您的方法getLatLng()返回一个有效的光标?是否有可能a)您的表未创建和/或b)您的车钥匙名称无效?此解决方案实际上将向前推进,我们不能使用movetonext作为while的最后一个语句,而条件将移动到下一项并返回true或false,否?:)…很高兴听到您得到了这一点,即使有e一些拼写错误。是“第二步(不到)”和“应该(不到)”这是一个打字错误:)@Ankit抱歉,你说的拼写错误是什么意思。你说的是什么?我在第一条评论中提到了拼写错误。谢谢,这让我看到了问题所在。我的PHP文件在解析MySql数据库中的数据时似乎出现了一些错误,这导致我的本地SQLite数据库没有值。很好,那么,你知道问题在哪里了吗现在出错。:)继续解决它。在你接受我的答案(标记为接受)之前,如果你需要我这边的任何东西,请告诉我
        cursor.moveToFirst();
          if (cursor.moveToFirst()){
    lat = cursor.getString(cursor.getColumnIndex("lat"));
    lng = cursor.getString(cursor.getColumnIndex("lng"));
    cordarr.add(lat);
    cordarr.add(lng);

     cursor.moveToNext(); //call this, so the cursor goes to the next
}  
if(cursor!=null)
 {
    cursor.moveToFirst();
    do {
    lat = cursor.getString(cursor.getColumnIndex("lat"));
    lng = cursor.getString(cursor.getColumnIndex("lng"));
    cordarr.add(lat);
    cordarr.add(lng);
   }while(cursor.moveToNext()); //It will move to next value.
  } 
    public ArrayList<String> getCoords(Context context, String lat, String lng) {
        DatabaseHandler db = new DatabaseHandler(context);
        Cursor cursor = db.getLatLng();
        if (cursor !null && cursor.moveToFirst()){
              ArrayList<String> cordarr = new ArrayList<String>();
            lat = cursor.getString(cursor.getColumnIndex("lat"));
            lng = cursor.getString(cursor.getColumnIndex("lng"));
            cordarr.add(lat);
            cordarr.add(lng);
            return cordarr;
        }
    cursor.close();
    db.close();
    return null;
    }
    UserFunctions userFunc = new UserFunctions();
    ArrayList<String> cordarr = new ArrayList<String>();
    cordarr = userFunc.getCoords(getApplicationContext(), Lat1, Lng1);
    if(cordarr != null && cordarr.size() > 1) {
    Log.d("LOG","have got lat long to show.")
    Lat1 = cordarr.get(0);
    Lng1 = cordarr.get(1);
    lat = goDouble(Lat1);
    lng  = goDouble(Lng1);
    LatLng sala = new LatLng(lat, lng); 
    } else {
        Log.d("LOG","no lat long found")
    }