2015-12-23 12 views
11

Tôi đang sử dụng cơ sở dữ liệu Sqlite trong một dự án Android của mình. Nó hoạt động tốt trong tất cả các thiết bị ngoại trừ One Plus Two thiết bị.Android One Plus Two: Không thể thay đổi ngôn ngữ cho db

Tôi nhận được ngoại lệ trong khi cố gắng mở cơ sở dữ liệu. Đây là crashlog.

12-23 19:14:35.235: E/SQLiteLog(3133): (11) database corruption at line 53216 of [9491ba7d73] 
12-23 19:14:35.235: E/SQLiteLog(3133): (11) statement aborts at 7: [SELECT locale FROM android_metadata UNION SELECT NULL ORDER BY locale DESC LIMIT 1] 
12-23 19:14:35.237: E/SQLiteDatabase(3133): Failed to open database '/data/data/com.zanec.dryjanuary/databases/alcochange.sqlite'. 
12-23 19:14:35.237: E/SQLiteDatabase(3133): android.database.sqlite.SQLiteException: Failed to change locale for db '/data/data/com.zanec.dryjanuary/databases/alcochange.sqlite' to 'en_US'. 

Hãy click here để xem vụ tai nạn log đầy đủ

Tôi đã thấy những câu hỏi khác như thế ở đây, tôi đã cố gắng hầu hết các câu trả lời, nhưng không hoạt động. Tôi đã thử thisthis.

EDIT: Thiết bị chạy trên Oxygen Lollipop.

+0

Mô hình thiết bị không cho chúng tôi biết tất cả, phần mềm, rom, v.v. Có cách hữu ích hơn vì thiết bị OnePlus thường chạy nhiều cấu hình khác nhau. –

+0

Đường dẫn này '/data/data/com.zanec.dryjanuary/databases/alcochange.sqlite/'không tồn tại. Kiểm tra 'context.getDatabasePath (/data/data/com.zanec.dryjanuary/databases/alcochange.sqlite/)' trả về kiểu 'File'. –

+0

Bạn có một dòng 'E/SQLiteDatabase (6278): Gây ra bởi: ???' trong crashlog của bạn? – naXa

Trả lời

1

Tôi không thể tìm thấy lý do tại sao tôi gặp phải lỗi này, nhưng bằng cách nào đó tôi đã tránh điều này bằng cách thực hiện như sau.

Trước đây, tôi đã có cơ sở dữ liệu .sqlite trong gói và khi người dùng mở ứng dụng của chúng tôi lần đầu tiên, tôi đã sao chép cơ sở dữ liệu .sqlite từ gói vào đường dẫn chính xác.

Nhưng bây giờ, tôi đã xuất các truy vấn thô từ tệp .sqlite và thêm nó với gói dưới dạng tệp txt. Bây giờ khi người dùng mở ứng dụng lần đầu tiên, trước tiên tôi sẽ tạo một tệp .sqlite trống trong đường dẫn và sau đó tôi đọc tất cả các truy vấn .sql từ tệp txt từ gói và thực thi chúng trên tệp .sqlite trong con đường.

0

Cố gắng thay đổi ngôn ngữ theo cách thủ công.

Mở tệp cơ sở dữ liệu của bạn bằng trình chỉnh sửa SQLite chẳng hạn như SQLiteStudio, sau đó mở bảng android_metadata. nếu nó không tồn tại, hãy tạo nó. (Bạn có thể tạo ra nó với trình chỉnh truy vấn (công cụ> biên tập truy vấn mở) và sao chép/dán mã DDL bên dưới)

CREATE TABLE android_metadata ( 
    locale TEXT 
); 

cho chèn các bản ghi, bạn có thể sao chép/dán dòng này trong trình soạn thảo truy vấn:

INSERT INTO android_metadata VALUES ('en_us'); 

Gợi ý: để chạy truy vấn trong SQLiteStudio, bạn nên nhấn nút có biểu tượng lightning trên thanh công cụ.

+0

Cố gắng rằng, không làm việc. –

Các vấn đề liên quan