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