2012-09-18 35 views
14

Tôi là lập trình viên android mới và gần đây tôi đã làm theo hướng dẫn cách tạo cơ sở dữ liệu SQLite cục bộ và sau đó truy cập cơ sở dữ liệu bằng cách sử dụng SQLiteDatabase.rawQuery để trả về một con trỏ. Tôi muốn sửa đổi ứng dụng của mình để sử dụng CursorLoader, đây rõ ràng là một cách tốt hơn để truy cập cơ sở dữ liệu. Vấn đề của tôi là trình xây dựng CursorLoader mong đợi một URI được cung cấp. Tôi chỉ cần nhập "file: /// [đường dẫn đến db]"? Có vẻ hơi lộn xộn một chút.CursorLoader, lấy URI cho cơ sở dữ liệu cục bộ

+0

Bạn nên đăng liên kết tới hướng dẫn để hoàn thành – Merlin

Trả lời

7

Lý do đằng sau trình tải con trỏ chấp nhận URI là nó dự kiến ​​truy vấn một contentProvider và không phải là một cơ sở dữ liệu thô.

Vì vậy, tôi khuyên bạn nên tạo nhà cung cấp nội dung sử dụng nội bộ cơ sở dữ liệu của bạn để bạn có thể trực tiếp sử dụng lớp CursorLoader.

Lợi thế của việc sử dụng nhà cung cấp nội dung là nó gói gọn dữ liệu của bạn tốt hơn và bạn có thể dễ dàng tận dụng nhiều apis từ Android trực tiếp.

Dưới đây là một số hướng dẫn về làm thế nào để tạo ra một nhà cung cấp nội dung

http://developer.android.com/guide/topics/providers/content-provider-creating.html

http://thinkandroid.wordpress.com/2010/01/13/writing-your-own-contentprovider/

Nếu bạn chọn không để tạo ra một ContentProvider bạn có thể mở rộng AsyncTaskLoader hoặc bộ nạp con trỏ trực tiếp để truy vấn dữ liệu theo cách bạn muốn.

+0

Cảm ơn điều này sẽ giúp ích một chút. – user1681358

3

Hãy xem thư viện LoaderEx của CommonsWare. Nó cho phép bạn sử dụng một Loader với một địa phương SQLiteDatabase, vì vậy bạn không phải đi đến tất cả những bận tâm của việc tạo của riêng bạn ContentProvider.

+1

Tôi muốn ít nhất có được triển khai ContentProvider của riêng mình, vì nó có vẻ là cách 'chuẩn' để làm mọi thứ ngay cả khi nó dường như bị thổi phồng cho các ứng dụng độc lập nhỏ. Nhưng tôi sẽ xem thư viện này tại một thời điểm nào đó khi tôi hiểu những điều cơ bản. – user1681358

+0

Từ git: 'DỰ ÁN NÀY KHÔNG BỊ TỪ CHỐI. Sử dụng nó có nguy cơ của riêng bạn. Nếu bạn đang duy trì một ngã ba công cộng mà bạn muốn người khác xem xét sử dụng, hãy thêm một vấn đề yêu cầu liên kết đến ngã ba của bạn từ README này. – zeroDivider

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