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) 个答案