Tôi bị mắc kẹt với ít nhiều vấn đề giống hệt nhau và tôi đã tìm thấy một khiếm khuyết mở về vấn đề có ý nghĩa ...
https://code.google.com/p/android/issues/detail?id=174566
Cách giải quyết của tôi - mặc dù không phải là giải pháp tốt nhất - là không bao giờ sửa đổi cơ sở dữ liệu và tự theo dõi điều này, do đó không bao giờ gọi onUpgrade()
và thực hiện nâng cấp theo cách thủ công khi cập nhật ứng dụng.
Ngoài ra, nếu bạn có một DB nhỏ chỉ được đọc, bạn có thể kích hoạt bản sao của db trong nội dung trên mọi onCreate()
trong DBHelper
nhưng điều này có thể gây ra các sự cố không mong muốn nếu hệ thống tệp đã đầy, vì vậy chỉ thực hiện việc này trong khi tìm kiếm giải pháp tốt hơn.
@Override
public void onCreate(SQLiteDatabase db) {
// Workaround for Issue 174566
myContext.deleteDatabase(DB_NAME);
try {
copyDataBase();
}
catch(IOException e) {
System.out.println("IOException " + e.getLocalizedMessage());
}
}
Ứng dụng của tôi hiện nâng cấp đúng như bình thường với cách giải quyết của tôi và bằng cách đánh giá khoảng thời gian kể từ khi lỗi này được phát sinh ban đầu, nó có thể không bao giờ được sửa ...
Tôi rất tiếc, đây không phải là một giải pháp đầy đủ cho vấn đề, nhưng ít nhất đó là một chặng đường phía trước.