Cách tốt nhất để chia sẻ một SQLite DB giữa một số hoạt động là gì? Các bảng từ DB được hiển thị trong ListView và việc xóa/chèn các bản ghi sẽ được thực hiện. Tôi nghe nói về Dịch vụ, nhưng không tìm thấy ví dụ cho vấn đề của tôi. Bây giờ tôi có lớp SQLiteOpenHelper để mở DB. Tôi đóng db trong OnPause() và mở nó trong onResume(). Nhưng tôi không thể chèn dữ liệu vào db từ hoạt động phụ, smth đi sai.Cơ sở dữ liệu SQLite Android được chia sẻ giữa các hoạt động
Trả lời
Tạo lớp Ứng dụng cho ứng dụng của bạn. Điều này sẽ vẫn hoạt động trong bộ nhớ miễn là bất kỳ phần nào của Ứng dụng của bạn đang chạy. Bạn có thể tạo DB của mình từ phương thức onCreate và làm sạch nó trong phương thức onTerminate. (Lưu ý rằng không có sự bảo đảm rằng onTerminate sẽ được gọi, vì vậy bạn nên cẩn thận về những gì bạn phụ thuộc vào đây. Tuy nhiên, vì một cơ sở dữ liệu SQLite chỉ là một tập tin, và được xóa sạch, hoạt động đóng là lịch sự hơn một sự cần thiết.)
Bạn có thể truy cập ứng dụng từ bất kỳ Hoạt động nào qua "getApplication", do đó, DB sẽ luôn có sẵn cho bạn.
Để biết thêm thông tin, hãy xem http://developer.android.com/guide/appendix/faq/framework.html#3.
Cập nhật:
Khi được yêu cầu, đây là ví dụ về cách sử dụng getApplication. Nó thực sự cực kỳ đơn giản.
SQLiteDatabase mDB;
@Override protected void onCreate(final Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
mDB = ((MyApplication)getApplication()).mDB;
}
Nếu mọi hoạt động bao gồm mã này, thì mọi hoạt động sẽ có trường MDB riêng tham chiếu cùng một đối tượng DB được chia sẻ cơ bản.
Bạn có thể làm điều này thực hiện một lớp BaseActivity gì được mở rộng bởi tất cả các lớp học Hoạt động trong ứng dụng:
public class BaseActivity extends Activity {
protected static SQLiteOpenHelper database;
@Override
protected void onPause() {
// TODO close database
super.onPause();
}
@Override
protected void onResume() {
super.onResume();
// TODO open database
}
}
public class OneSubActitivy extends BaseActivity {
// methods using database from BaseActivity
}
Sự khác biệt giữa triển khai hoạt động cơ sở và triển khai onResume và onPause cho từng hoạt động là gì? –
Chỉ thực hiện một lần mã trong BaseActivity. Bạn phải viết mã chung cho tất cả các hoạt động trong lớp cơ sở ... – caligari
- 1. Chia sẻ cơ sở dữ liệu sqlite giữa nhiều Hoạt động Android
- 2. Chia sẻ cơ sở dữ liệu giữa Twisted và Django
- 3. Cơ sở dữ liệu SOA và chia sẻ
- 4. Cơ sở dữ liệu SQLite của Android: chèn chậm
- 5. Cơ sở dữ liệu Flushing và SQLite trên android
- 6. Android: SQLite sử dụng cơ sở dữ liệu sai
- 7. Tạo một Dịch vụ để chia sẻ kết nối cơ sở dữ liệu giữa tất cả các hoạt động trong ứng dụng Android?
- 8. onUpgrade() cơ sở dữ liệu sqlite trong Android
- 9. Chèn mảng trong cơ sở dữ liệu SQLite trong android
- 10. Android - Đâu là cơ sở dữ liệu SQLite lưu trữ
- 11. Android duyệt cơ sở dữ liệu SQLite trên điện thoại
- 12. Android đổi tên Cơ sở dữ liệu SQLite
- 13. cơ sở dữ liệu Android SQLite bị hỏng
- 14. Lược đồ cơ sở dữ liệu Sqlite của Android
- 15. cơ sở dữ liệu sqlite không được tạo
- 16. Tạo bảng trong cơ sở dữ liệu sqlite trên android
- 17. Android ExpandableListView và cơ sở dữ liệu SQLite
- 18. chia sẻ bảng cơ sở dữ liệu giữa hai dự án django
- 19. sự khác biệt giữa rawquery và execSQL trong cơ sở dữ liệu sqlite android
- 20. Chia sẻ dữ liệu giữa AppDomains
- 21. MVVM: Chia sẻ dữ liệu giữa ViewModels
- 22. Sự khác biệt giữa sở thích được chia sẻ và sqlite
- 23. đồng bộ hóa cơ sở dữ liệu sqlite android
- 24. biến chia sẻ giữa hai luồng hoạt động khác với thuộc tính được chia sẻ
- 25. Chia sẻ dữ liệu giữa các quy trình trong Python
- 26. Chia sẻ dữ liệu giữa các liên kết người dùng
- 27. Angularjs chia sẻ dữ liệu giữa các bộ điều khiển
- 28. hoạt động bên trong của một cơ sở dữ liệu
- 29. SQLite: cơ sở dữ liệu chỉ đọc
- 30. Sqlite qua mạng chia sẻ
Vì vậy, bất kỳ hoạt động sẽ có thể đọc dữ liệu/ghi mà không mâu thuẫn? Bạn có thể hiển thị một số ví dụ cho getApplication() metod không? –
Tất cả các hoạt động, dịch vụ, v.v. sử dụng cùng chuỗi sự kiện, do đó không có rủi ro về các sự cố đồng bộ hóa. Bạn nên sử dụng "startManagingCursor" cho bất kỳ con trỏ nào mà bạn sử dụng cho bộ điều hợp trong các hoạt động của bạn để chúng sẽ bị vô hiệu hoá và được truy vấn lại khi bạn di chuyển từ một hoạt động này sang hoạt động khác. – beekeeper
Thay thế SQLiteDatabase bằng SQLiteOpenHelper sẽ ổn chứ? –