有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java HttpReader OnResultReadyListener:尝试重新打开一个AlreadCyclosed对象:SQLiteDatabase

我正在尝试转换联机的csv文件,并尝试根据结果调用execSQL(字符串)

唯一的问题是,我在参数中使用函数发送SQLiteDatabase,但是如果我不将参数设置为final,我就无法从resultedy(String result){}中访问它

但当我将SQLiteDatabase参数设置为final时,我会收到错误消息: “尝试重新打开已关闭的对象:SQLiteDatabase:…”

有人知道我怎么解决这个问题吗

功能:

private void insertTalen(SQLiteDatabase db) {
    // lijst van alle talen met taalcode opgehaald van het internet
    HttpReader httpReader = new HttpReader();
    httpReader.setOnResultReadyListener(new HttpReader.OnResultReadyListener() {
        @Override
        public void resultReady(String result) {
            CsvHelper csvHelper = new CsvHelper();
            List<Taal> talen = csvHelper.getTalenFromCsv(result);
            for (Taal taal: talen) {
                String SQLScript = "INSERT INTO taal (engelseTaalNaam, taalCode) VALUES ('";
                SQLScript += taal.getEngelseNaam();
                SQLScript += "', '";
                SQLScript += taal.getTaalCode();
                SQLScript += "');";
                db.execSQL(SQLScript);
            }
        }

    });

    httpReader.execute("https://raw.githubusercontent.com/datasets/language-codes/master/data/language-codes.csv");
}

这个函数是从oncreate调用的:

@Override
public void onCreate(SQLiteDatabase db) {
    String CREATE_TABLE_TAAL = "CREATE TABLE taal (" +
            "id INTEGER PRIMARY KEY AUTOINCREMENT," +
            "engelseNaam TEXT," +
            "taalCode TEXT)";
    db.execSQL(CREATE_TABLE_TAAL);

    String CREATE_TABLE_GEBRUIKER = "CREATE TABLE gebruiker (" +
            "id INTEGER PRIMARY KEY AUTOINCREMENT," +
            "highscoreGebruikerId INTEGER," +
            "eigenTaalId INTEGER," +
            "vreemdeTaalId INTEGER," +
            "FOREIGN KEY (eigenTaalId) REFERENCES taal(id)," +
            "FOREIGN KEY (vreemdeTaalId) REFERENCES taal(id))";
    db.execSQL(CREATE_TABLE_GEBRUIKER);

    String CREATE_TABLE_OPGESLAGEN_WOORD = "CREATE TABLE opgeslagenWoord (" +
            "id INTEGER PRIMARY KEY AUTOINCREMENT," +
            "taalId INTEGER," +
            "naam TEXT," +
            "engelseVersieId INTEGER," +
            "FOREIGN KEY (taalId) REFERENCES taal(id)," +
            "FOREIGN KEY (engelseVersieId) REFERENCES opgeslagenWoord(id))";
    db.execSQL(CREATE_TABLE_OPGESLAGEN_WOORD);

    String CREATE_TABLE_GEKEND_WOORD = "CREATE TABLE gekendWoord (" +
            "opgeslagenWoordId INTEGER PRIMARY KEY ," +
            "datumverloopt TEXT," +
            "niveauGekend INTEGER," +
            "FOREIGN KEY (opgeslagenWoordId) REFERENCES opgeslagenWoord(id))";
    db.execSQL(CREATE_TABLE_GEKEND_WOORD);

    this.db = db;

    insertTalen(db);
    insertGebruiker(db);
}

共 (0) 个答案