Так должен ли я реализовать свой собственный класс View тоже? Будет ли поставщик переопределять жизненный цикл произвольно? Извините, я не совсем понимаю, какой части API мне следует доверять? С тех пор я исправил проблему, но ваш комментарий меня не шокирует, поскольку я не могу поверить, что такие вещи ожидаются, потому что я прочитал документацию и ожидал, что они будут вести себя так, как они задокументированы?
леднее время я получаю много жалоб на серию HTC Desire, и она перестала работать при вызове SQL-операторов. Я получил отчеты от пользователей со снимками журнала, которые содержат следующее.
I/Database( 2348): sqlite returned: error code = 8, msg = statement aborts at 1: [pragma journal_mode = WAL;]
E/Database( 2348): sqlite3_exec to set journal_mode of /data/data/my.app.package/files/localized_db_en_uk-1.sqlite to WAL failed
затем мое приложение в основном горит в огне, потому что вызов, чтобы открыть базу данных, приводит к серьезной ошибке во время выполнения, которая проявляется в том, что курсор остается открытым. В этой точке не должно быть курсора, так как мы пытаемся его открыть.
Это происходит только с HTC Desire HD и Z. Мой код в основном делает следующее (немного изменен, чтобы изолировать проблемную область).
SQLiteDatabase db;
String dbName;
public SQLiteDatabase loadDb(Context context) throws IOException{
//Close any old db handle
if (db != null && db.isOpen()) {
db.close();
}
// The name of the database to use from the bundled assets.
String dbAsset = "/asset_dir/"+dbName+".sqlite";
InputStream myInput = context.getAssets().open(dbAsset, Context.MODE_PRIVATE);
// Create a file in the app's file directory since sqlite requires a path
// Not ideal but we will copy the file out of our bundled assets and open it
// it in another location.
FileOutputStream myOutput = context.openFileOutput(dbName, Context.MODE_PRIVATE);
byte[] buffer = new byte[1024];
int length;
while ((length = myInput.read(buffer)) > 0) {
myOutput.write(buffer, 0, length);
}
// Close the streams
myOutput.flush();
// Guarantee Write!
myOutput.getFD().sync();
myOutput.close();
myInput.close();
// Not grab the newly written file
File fileObj = context.getFileStreamPath(dbName);
// and open the database
return db = SQLiteDatabase.openDatabase(fileObj.getAbsolutePath(), null, SQLiteDatabase.OPEN_READONLY | SQLiteDatabase.NO_LOCALIZED_COLLATORS);
}
К сожалению, этот телефон доступен только в Великобритании, и у меня его нет в моем инвентаре. Я получаю сообщения только такого типа из серии HTC Desire. Я не знаю, что изменилось, так как этот код работал без проблем. Есть ли что-то, что мне не хватает?