2011-01-10 24 views
8

Vì lý do nào đó giải pháp xử lý cơ sở dữ liệu được mô tả trong this article không hoạt động trên HTC Desire HD sau khi cập nhật OTA lên 2.2.1 (1.72 .405.3). Nó hoạt động trên Desire HD trước khi cập nhật và tôi đã thất bại trong việc tái tạo lỗi trên các thiết bị thực chạy 2.1, 2.2 cũng như trong trình mô phỏng chạy tất cả các phiên bản.Xử lý cơ sở dữ liệu ngừng hoạt động trên Android 2.2.1 (Desire HD 1.72.405.3)

Thật không may là bạn không thể tạo AVD cho trình giả lập chạy Android 2.2.1 và tôi đã thử một ROM dựa trên 2.2.1 (Tôi có một chiếc HTC Desire thông thường) nhưng ứng dụng của tôi cũng không có vấn đề gì. . Vì vậy, câu hỏi đặt ra là nếu nó đang sử dụng SDK Android theo một cách nào đó, nó không phải là tất cả của một đột ngột gây ra vấn đề?

Tôi biết đây là một vấn đề rất cụ thể nhưng vì nhiều nhà phát triển hơn tôi báo cáo vấn đề cũng như thực tế là bạn không thể tạo AVD, tôi hy vọng câu hỏi được chấp nhận và tôi hy vọng ai đó có đầu mối vấn đề.

Dưới đây là một stack trace gửi vào tài khoản của thị trường của tôi bằng cách sử dụng:

Caused by: android.database.sqlite.SQLiteDiskIOException: disk I/O error 
at android.database.sqlite.SQLiteDatabase.native_setLocale(Native Method) 
at android.database.sqlite.SQLiteDatabase.setLocale(SQLiteDatabase.java:2049) 
at android.database.sqlite.SQLiteDatabase.<init>(SQLiteDatabase.java:1917) 
at android.database.sqlite.SQLiteDatabase.openDatabase(SQLiteDatabase.java:889) 
at android.database.sqlite.SQLiteOpenHelper.getReadableDatabase(SQLiteOpenHelper.java:168) 
at com.MyApp.DataBaseHelper.createDataBase(DataBaseHelper.java:81) 
at com.MyApp.InitialActivity.onCreate(InitialActivity.java:33) 
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2797) 
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1066) 

phương pháp liên quan có thể được tìm thấy tại pastebin. Vì chỉ có một liên kết có thể được bao gồm liên kết có thể được tìm thấy trong các ý kiến ​​dưới đây. Lưu ý rằng dòng 81 được tìm thấy trong dấu vết ngăn xếp là dòng 10 tại pastebin.

+0

http://pastebin.com/VTmCkeLq –

+0

Nhận xét bổ sung từ những người dùng khác về cùng một vấn đề có thể được đọc từ nhận xét này và dưới đây: http://www.reigndesign.com/blog/using-your-own-sqlite -database-in-android-applications/comment-page-4/# comment-43655 –

+0

là ngôn ngữ en_US không có trên phiên bản Android 2.2.1 mới? Từ nguồn Android SQLiteDatabase.setLocale: "@throws SQLException nếu không thể đặt ngôn ngữ. Lý do phổ biến nhất cho điều này là không có trình thu thập nào có sẵn cho ngôn ngữ bạn yêu cầu." –

Trả lời

5

Cuối cùng tôi dường như đã khiến ứng dụng của tôi hoạt động trên Android 2.2.1 trên Desire HD. Tôi đã không có cơ hội tự mình gỡ lỗi để thử chính xác những gì gây ra sự cố.

Một ý nghĩ xuất hiện là đường dẫn mã hóa cứng đến nơi tệp cơ sở dữ liệu được đặt. DB_PATH = “/ dữ liệu/dữ liệu/YOUR_PACKAGE/cơ sở dữ liệu /”;

Tôi đoán có thể con đường này không hợp lệ trên Android 2.2.1 dành cho Desire HD. Tôi đã trao đổi đường dẫn này với: Environment.getDataDirectory() + “/ data/YOUR_PACKAGE/databases /” + DB_NAME;

Tôi sẽ cố gắng xác định vấn đề khi tôi có cơ hội tự mình kiểm tra trên điện thoại thực. Nếu bất cứ ai kiểm tra giải pháp này, xin vui lòng cho tôi biết nếu nó giải quyết nó.

0

cũng như câu trả lời tuyệt vời từ Björn, liên kết này làm việc cho tôi:

Link on AndDev.org

Có vẻ như bạn phải specificly đóng sự trở lại của this.getReadableDatabase();

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