android应用程序中从数据库中获取特定项的问题

android应用程序中从数据库中获取特定项的问题,android,Android,我正在开发一个android应用程序,其中我必须显示数据库中的数据。我已经创建了数据库,现在我正在列表视图中显示数据库。下面是我无法解决的崩溃 09-08 01:20:45.651:错误/AndroidRuntime16459:原因:android.database.CursorIndexOutOfBoundsException:请求索引114,大小为114 09-08 01:20:45.651:ERROR/AndroidRuntime16459:at-android.database.Abst

我正在开发一个android应用程序,其中我必须显示数据库中的数据。我已经创建了数据库,现在我正在列表视图中显示数据库。下面是我无法解决的崩溃

09-08 01:20:45.651:错误/AndroidRuntime16459:原因:android.database.CursorIndexOutOfBoundsException:请求索引114,大小为114 09-08 01:20:45.651:ERROR/AndroidRuntime16459:at-android.database.AbstractCursor.checkPositionAbstractCursor.java:580 09-08 01:20:45.651:ERROR/AndroidRuntime16459:at-android.database.AbstractWindowedCursor.checkPositionAbstractWindowedCursor.java:214 09-08 01:20:45.651:ERROR/AndroidRuntime16459:at-android.database.AbstractWindowedCursor.getStringAbstractWindowedCursor.java:41 09-08 01:20:45.651:ERROR/AndroidRuntime16459:com.redorange.database.MessageDbAdapter.getSeedDetails消息dbadapter.java:360 09-08 01:20:45.651:ERROR/AndroidRuntime16459:com.redorange.headshop.CustomAdapter.onCreateCustomAdapter.java:36 09-08 01:20:45.651:ERROR/AndroidRuntime16459:at android.app.Instrumentation.callActivityOnCreateInstrumentation.java:1047 09-08 01:20:45.651:ERROR/AndroidRuntime16459:at android.app.ActivityThread.performLaunchActivityActivityThread.java:1586 09-08 01:20:45.651:错误/AndroidRuntime16459:。。。还有11个

有人能帮我吗

提前谢谢
Tushar

看起来您试图从数据库中无效的位置访问项目

android.database.CursorIndexOutOfBoundsException:索引114

您可能试图访问数据集中不存在的项,或者是返回行末尾之外的行,或者是行中不存在的项

如果可能,请向我们显示带有行号的CustomAdapter代码

编辑 您的函数GetSeedDetails错误。您移动的逻辑不正确,导致您超出光标的限制。在while条件中只使用moveToNext调用,您将迭代数据值。完成后也不要忘记关闭光标

public ArrayList<GetDataBaseValues> GetSeedDetails()throws SQLException
{
    ArrayList<GetDataBaseValues> seedRecordsList = new  ArrayList<GetDataBaseValues>();
    GetDataBaseValues getDatabaseVariables; 
    Cursor mCursor = mDb.query("headshop", new String[] {"_id","name","grade","description"
              }, null, null, null, null, null);


    while(mCursor.moveToNext())
    {  
         getDatabaseVariables = new GetDataBaseValues();
         getDatabaseVariables.setName(mCursor.getString(01).toString());
         Log.e("FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF", mCursor.getString(1).toString());
         getDatabaseVariables.setGrade(mCursor.getString(0).toString());
         Log.e("FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF", mCursor.getString(2).toString());
         getDatabaseVariables.setDesc(mCursor.getString(0).toString());
         Log.e("FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF", mCursor.getString(3).toString());
         seedRecordsList.add(getDatabaseVariables);

  }
  mCursor.close();
  return seedRecordsList;
}
在GetSeedDetails方法中,使用如下代码:

public ArrayList<GetDataBaseValues> GetSeedDetails()throws SQLException
{
    ArrayList<GetDataBaseValues> seedRecordsList = new  ArrayList<GetDataBaseValues>();
    GetDataBaseValues getDatabaseVariables;
    Cursor mCursor = mDb.query("headshop", 
            new String[] {"_id","name","grade","description"
            }, null, null, null, null, null);

    mCursor.moveToFirst();
    while(mCursor.isAfterLast() == false)
    {
        getDatabaseVariables = new GetDataBaseValues();
        String name = mCursor.getString(mCursor.getColumnIndex("name"));
        getDatabaseVariables.setName(name);
        String grade = mCursor.getString(mCursor.getColumnIndex("grade"));
        getDatabaseVariables.setGrade(grade);
        String desc = mCursor.getString(mCursor.getColumnIndex("description"));
        getDatabaseVariables.setDesc(desc);
        seedRecordsList.add(getDatabaseVariables);
        mCursor.moveToNext();
    }
    mCursor.close();
    return seedRecordsList;
}

下面是代码,,,,@user813953,我认为mDb.GetSeedDetails方法中存在问题。你能显示它的代码吗?@user813953:更新了我的答案。这应该可以阻止这种情况crash@kurru谢谢,,,非常,,,,,我想我的错误是我没有关闭光标,对吗,,?@user813953:另一个文本修复程序,混淆了我的方法:P,,,当我给getstring赋予相同的值0时,它崩溃了,,,,如何解决这个问题?我想这是因为在0中,index是_idcolumn,类型是int。如果要获取它的值,请使用int id=mCursor.getIntmCursor.getColumnIndex_id;,还更新了答案,您可以查看如何获取其他列。此列名称是表列的名称。