Java SQLite Android索引越界问题

Java SQLite Android索引越界问题,java,android,sql,sqlite,adk,Java,Android,Sql,Sqlite,Adk,我试图在SQLite数据库中添加一篇文章,然后立即检索它。 我似乎正确地添加了帖子,但当涉及到检索时,我得到了这个错误 05-23 00:26:03.088: E/AndroidRuntime(30715): FATAL EXCEPTION: main 05-23 00:26:03.088: E/AndroidRuntime(30715): Process: com.deparesmatteo.www, PID: 30715 05-23 00:26:03.088: E/AndroidRuntim

我试图在SQLite数据库中添加一篇文章,然后立即检索它。 我似乎正确地添加了帖子,但当涉及到检索时,我得到了这个错误

05-23 00:26:03.088: E/AndroidRuntime(30715): FATAL EXCEPTION: main
05-23 00:26:03.088: E/AndroidRuntime(30715): Process: com.deparesmatteo.www, PID: 30715
05-23 00:26:03.088: E/AndroidRuntime(30715): android.database.CursorIndexOutOfBoundsException:            Index -1 requested, with a size of 1
05-23 00:26:03.088: E/AndroidRuntime(30715):    at     android.database.AbstractCursor.checkPosition(AbstractCursor.java:426)
05-23 00:26:03.088: E/AndroidRuntime(30715):    at android.database.AbstractWindowedCursor.checkPosition(AbstractWindowedCursor.java:136)
以下是我正在使用的方法:

public static PostEntity createPost(final PostEntity entity)
{
    ContentValues values = new ContentValues();
    values.put(MySQLiteOpenHelper._TITLE, entity.getPostTitle());
    values.put(MySQLiteOpenHelper._DESCRIPTION, entity.getPostDesc());
    values.put(MySQLiteOpenHelper._CATEGORY, entity.getPostCategory());
    values.put(MySQLiteOpenHelper._IMAGEURL, entity.getPostImageURL());
    long postId=database.insert(MySQLiteOpenHelper.TABLE_NAME, null, values);
    Cursor cursor =database.query(MySQLiteOpenHelper.TABLE_NAME, ALL_COLUMNS, MySQLiteOpenHelper._ID+" = '"+(postId)+"'", null, null, null, null);
    return getEntityFromCursor(cursor);
}
private static PostEntity getEntityFromCursor(final Cursor cursor)
{
    PostEntity entity = new PostEntity(cursor.getInt(0), cursor.getString(1),cursor.getString(2),cursor.getString(3),cursor.getString(4));
    return entity;
提前感谢您的帮助

编辑


这些是全列声明

public static final String TABLE_NAME = "post";
private static final String DATABASE_NAME="posts.db";
private static final int DATABASE_VERSION = 1;

public static final String _ID = "_id";
public static final String _TITLE = "title";
public static final String _DESCRIPTION = "description";
public static final String _CATEGORY = "category";
public static final String _IMAGEURL = "image";


private static final String DB_CREATE = "CREATE TABLE " + TABLE_NAME + 
                                        "(" + _ID + " integer primary key, " +
                                        _TITLE + " text not null, "
                                        + _DESCRIPTION + " text not null, "
                                        + _CATEGORY + " text not null, "
                                        + _IMAGEURL + " text not null "+");";
MySQLiteOpenHelper声明

public static final String TABLE_NAME = "post";
private static final String DATABASE_NAME="posts.db";
private static final int DATABASE_VERSION = 1;

public static final String _ID = "_id";
public static final String _TITLE = "title";
public static final String _DESCRIPTION = "description";
public static final String _CATEGORY = "category";
public static final String _IMAGEURL = "image";


private static final String DB_CREATE = "CREATE TABLE " + TABLE_NAME + 
                                        "(" + _ID + " integer primary key, " +
                                        _TITLE + " text not null, "
                                        + _DESCRIPTION + " text not null, "
                                        + _CATEGORY + " text not null, "
                                        + _IMAGEURL + " text not null "+");";

您忘记正确访问光标。将您的
getEntityFromCursor()
更改为:

private static PostEntity getEntityFromCursor(final Cursor cursor) {
    PostEntity entity = null;
    if( cursor != null && cursor.moveToFirst() ) {
        entity = new PostEntity( cursor.getInt(0),
                                 cursor.getString(1),
                                 cursor.getString(2),
                                 cursor.getString(3),
                                 cursor.getString(4) );
    }
    return entity;
}

您的DDL和重要位在哪里,例如
ALL_COLUMNS
…?私有最终静态字符串[]ALL_COLUMNS={MySQLiteOpenHelper.\u ID.toString(),MySQLiteOpenHelper.\u TITLE,MySQLiteOpenHelper.\u DESCRIPTION,MySQLiteOpenHelper.\u CATEGORY,MySQLiteOpenHelper.\u IMAGEURL};我把它们从帖子中删掉了,因为它们似乎在其他环境下工作。所有的声明都在那里,请不要在评论中发布代码,这是不可读的。改为编辑您的问题。别忘了提供您的DDL以及MySQLiteOpenHelper中的合同。谢谢您这么做。我只是重读了一遍,结果发现,你只是忘记了移动光标——你需要
cursor.moveToFirst()
才能从中读取值。此时检查光标是否为空,甚至是否包含数据可能是一个好主意。仅供参考,您不需要在
String
s上使用
.toString()
。检查光标是否为
null