如何修复“ IllegalStateException”错误?

时间:2019-09-03 11:16:29

标签: android sqlite cursors

我想问一下为什么它不起作用,所以下次我可以更好地帮助自己。如何修复Android Studio中的IllegalStateException错误。从数据库中检索数据时出现此错误。我收到的错误是如下所述的非法状态异常。

  

致命异常:java.lang.IllegalStateException       无法从CursorWindow读取行6023,列0。在从游标访问数据之前,请确保正确初始化了游标。       com.navdemo.ui.forms.FormDetailViewModel $ 10.run

代码,出现此错误的原因是:

private void initScansForForm() {
        if (form == null) {
            return;
        }

        final String formId = form.getFormId();
        new Thread() {
            public void run() {
                List<Scan> scans = new ArrayList<>();
                Cursor c = db.fetchFormScans(formId);
                int id = 0;
                while (c.moveToNext()) {
                    if (!c.isNull(0)){
                        id = c.getInt(0);

                    }
                    else {
                        Log.d(TAG, "run: "+id);
                    }
                    int formId = c.getInt(1);
                    String scanTime = c.getString(2);
                    String locationName = c.getString(3);
                    double latitude = c.getDouble(4);
                    double longitude = c.getDouble(5);

                    scans.add(new Scan(id, formId, scanTime, locationName, latitude, longitude));
                }
                setScans(scans);
            }
        }.start();
    }
public Cursor fetchFormScans(@NonNull String formId) {
        return fetchFormScans(Integer.parseInt(formId));
    }


public Cursor fetchFormScans(@NonNull String formId) `enter code here`{
        return fetchFormScans(Integer.parseInt(formId));
 }

2 个答案:

答案 0 :(得分:0)

在进行!cursor.isAfterLast()之前尝试检查moveToNext

答案 1 :(得分:0)

请确保您输入的号码是     字符串formId = form.getFormId(); 由于您的fetchFormScans()方法将字符串formId解析为整数,因此如果formId中包含字母,可能会出现问题。