IllegalStateException, запрашивающий SQLite, но только на некоторых устройствах

Я использую ORMLite для запроса моей базы данных. У меня есть код ниже. Он отлично работает на каждом телефоне, который я пробовал (Nexus 4, 5, S3). Тем не менее, он получает ошибку на HTC One и MotoX.

try {
    return Globals.getApplication().getDBHelper().getUserDao().queryForId(id);
} catch (SQLException e) {
    e.printStackTrace();
    return null;
}

Вот класс пользователя Dao &:

public Dao<User, String> getUserDao() throws SQLException {
    if (userDao == null) {
        userDao = getDao(User.class);
    }
    return userDao;
}

@DatabaseTable(tableName = User.tableName)
public class User {
    public static final String tableName = "User";
    private static final String TAG = "[User]";
    @DatabaseField(id=true)
    private String id;
    @DatabaseField(columnName = "name")
    private String name;
    @DatabaseField(columnName = "phone", canBeNull = true)
    private String phone;
}

Ошибка ниже. Когда он перейдет в это состояние, даже если я перезапущу приложение, оно продолжит падать.

Есть идеи, почему это происходит только с конкретными телефонами? Или что приводит к плохому состоянию базы данных?

        AndroidRuntime  E  FATAL EXCEPTION: main
                    E  java.lang.RuntimeException: Unable to start activity ComponentInfo{com.leo.android/com.leo.android.ui.MainActivity}: java.lang.IllegalStateException: Couldn't read row 0, col 4 from CursorWind
                       ow.  Make sure the Cursor is initialized correctly before accessing data from it.
                    E   at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2463)
                    E   at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2520)
                    E   at android.app.ActivityThread.access$600(ActivityThread.java:162)
                    E   at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1366)
                    E   at android.os.Handler.dispatchMessage(Handler.java:99)
                    E   at android.os.Looper.loop(Looper.java:158)
                    E   at android.app.ActivityThread.main(ActivityThread.java:5751)
                    E   at java.lang.reflect.Method.invokeNative(Native Method)
                    E   at java.lang.reflect.Method.invoke(Method.java:511)
                    E   at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1083)
                    E   at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:850)
                    E   at dalvik.system.NativeStart.main(Native Method)
                    E  Caused by: java.lang.IllegalStateException: Couldn't read row 0, col 4 from CursorWindow.  Make sure the Cursor is initialized correctly before accessing data from it.
                    E   at android.database.CursorWindow.nativeGetLong(Native Method)
                    E   at android.database.CursorWindow.getLong(CursorWindow.java:565)
                    E   at android.database.AbstractWindowedCursor.getLong(AbstractWindowedCursor.java:75)
                    E   at android.database.AbstractCursor.moveToPosition(AbstractCursor.java:220)
                    E   at android.database.AbstractCursor.moveToFirst(AbstractCursor.java:237)
                    E   at com.j256.ormlite.android.AndroidCompiledStatement.getCursor(AndroidCompiledStatement.java:163)
                    E   at com.j256.ormlite.android.AndroidCompiledStatement.runQuery(AndroidCompiledStatement.java:57)
                    E   at com.j256.ormlite.stmt.SelectIterator.<init>(SelectIterator.java:55)
                    E   at com.j256.ormlite.stmt.StatementExecutor.buildIterator(StatementExecutor.java:245)
                    E   at com.j256.ormlite.stmt.StatementExecutor.query(StatementExecutor.java:194)
                    E   at com.j256.ormlite.dao.BaseDaoImpl.query(BaseDaoImpl.java:263)
                    E   at com.j256.ormlite.stmt.QueryBuilder.query(QueryBuilder.java:361)
                    E   at com.leo.android.entities.User.getUser(User.java:235)

1 ответ

Используйте следующий код в месте вашего запроса, чтобы получить все данные из базы данных

 for ex:- 
 select * from tableName where name = "a";
Другие вопросы по тегам