2012-08-08 47 views
5

Ứng dụng của tôi sử dụng mẫu SyncAdapter, giữ bằng chứng xác thực người dùng bằng cách sử dụng AccountManagerContentProvider để lưu trữ dữ liệu trong một db.Xóa cơ sở dữ liệu khi Tài khoản bị xóa

Khi account bị xóa, tôi có thể xóa db bằng cách sử dụng phương pháp được giải thích trong this question. Các db được loại bỏ bằng cách làm:

boolean deleted = mContext.deleteDatabase(DatabaseHelper.DATABASE_NAME); 

Điều này làm việc tốt nhưng khi tôi đăng nhập lại mọi thứ vẫn còn đó. Có vẻ như ContentProvider không biết rằng db đã bị xóa.

Trong this answer, inazaruk nói:

Bạn cần phải chắc chắn rằng bạn đã giết quá trình mà tổ chức ContentProvider có sử dụng tập tin cơ sở dữ liệu cụ thể. Và chỉ hơn xóa nó.

Giết quá trình xóa một db không cảm thấy đúng.

Có cách nào tốt hơn để làm?

+0

Tại sao xóa các tập tin cơ sở dữ liệu? Không phải là loại bỏ các dữ liệu từ cơ sở dữ liệu đủ? – zapl

+0

@zapl: Đúng. Tôi có thể làm một cái gì đó như 'xóa khỏi bảng;' – Macarse

Trả lời

2

Nếu tôi có để làm điều đó tôi sẽ cố gắng nó theo cách sau:

thêm một số Uri rằng khi bạn chèn hoặc xóa bằng cách sử rằng Uri gây nên xóa cơ sở dữ liệu bên trong ContentProvider của bạn. Khi xóa cũng xóa tất cả các tham chiếu đến SQLiteDatabase vì có thể bạn vẫn có thể truy cập tệp cơ sở dữ liệu cũ thông qua đó (Nếu bạn xóa tệp trong Linux và bạn mở tệp đó, bạn vẫn có thể sử dụng nó - nó không còn truy cập được nữa con đường).

Bằng cách đặt xóa bên trong ContentProvider bạn sẽ có thể đóng kết nối cơ sở dữ liệu và theo dõi trạng thái xóa theo cách mà bạn biết rằng bạn cần tạo lại tệp cơ sở dữ liệu.

ContentProviders không bỏ trừ khi bạn giết ứng dụng của bạn, do đó bạn có thể có cùng một ví dụ chạy và tham chiếu đến tập tin cũ lẽ như đã đề cập ở trên

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