У меня проблема, которая сильно меня озадачила, и я бы по достоинству оценил некоторый вклад. У меня есть поток в моем приложении, который вставляется в базу данных из файла csv. Все кажется прекрасным, но в последнее время я получаю базу данных, не открывая трассировки стека, отправленные мне с консоли разработчика.андроид спорадическая база данных не открыта проблема
Его счастье на самом деле небольшая часть моих пользователей, возможно, 1 из 100 имеет эту проблему, я могу запустить вставку в течение нескольких часов, прежде чем я, наконец, увижу ошибку, и когда я сделаю это, нет никакой разницы, чем то, что я сделал другой 80 раз, когда он работал нормально.
Heres трассировка стеки:
java.lang.IllegalStateException: база данных не открыта на android.database.sqlite.SQLiteDatabase.insertWithOnConflict (SQLiteDatabase.java:1615) в android.database.sqlite. SQLiteDatabase.insert (SQLiteDatabase.java:1515) на com.ljworkshop.YugiohCompanion.DBAdapterCards.insertCard (DBAdapterCards.java:169) на com.ljworkshop.YugiohCompanion.home $ 8.run (home.java:1020) на java .lang.Thread.run (Thread.java:1027)
Heres участок кода:
public void cardBaseupdate(String file,int amount) {
final String files = file;
final int amountf = amount;
dialog = new ProgressDialog(home.this);
dialog.setCancelable(false);
dialog.setMessage("Populating Database");
dialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
dialog.setProgress(0);
dialog.setMax(amountf);
dialog.show();
Thread background = new Thread (new Runnable() {
public void run() {
InputStream data1 = null;
try {
data1 = getAssets().open(files);
} catch (IOException e) {
e.printStackTrace();
}
BufferedReader in = new BufferedReader(new InputStreamReader(data1));
String reader = "";
try {
while ((reader = in.readLine()) != null){
Integer.toString(in.readLine().length()),
String[] RowData = reader.split(",");
String name = RowData[0];
String number = RowData[1];
String series = RowData[2];
String type = RowData[3];
String element = RowData[4];
String level = RowData[5];
String spell = RowData[6];
String att = RowData[7];
String def= RowData[8];
String rules = RowData[9];
String legal = RowData[10];
dbc.open();
progressHandler.sendMessage(progressHandler.obtainMessage());
dbc.insertCard(name,number,series,type,element,level,spell,att,def,rules,legal);
dbc.close();
}
} catch (IOException e) {
e.printStackTrace();
}
try {
in.close();
} catch (IOException e) {
e.printStackTrace();
}
valueSet = true;
}
});
background.start();
Привет, спасибо за комментарий и извините за поздний ответ ... В конце концов я полностью повторил, как я заполнил базу данных. Как вы говорите, прохождение csv в потоке не является лучшим pratcice. Im упаковывает базу данных в активы и копирует ее, что работает намного лучше. –