2013-03-01 42 views
5

Tôi có một ListView chứa một tập dữ liệu lớn.
Lúc đầu, tôi tải tất cả dữ liệu từ một Webservice.Cách triển khai bộ nhớ đệm ListView trong Android

Bây giờ tôi muốn lưu trữ dữ liệu đó để nếu tôi mở lại trang đó, tôi có thể tìm nạp dữ liệu từ bộ nhớ cache thay vì truy vấn lại webservice.

Tôi làm như thế nào ?.

+0

bất kỳ mã mẫu nào cho điều này? – jithu

Trả lời

11

tôi giả sử bạn đang lưu trữ các dữ liệu lấy từ WebService trong một đối tượng serializable

Bạn có thể lưu trữ đối tượng serializable vào một tập tin và tải chúng sau này (như bạn đã nêu trong câu hỏi của bạn trước khi bạn sửa nó.):

Store:

FileOutputStream fileOutputStream = yourContext.openFileOutput(fileName, Context.MODE_PRIVATE); 
ObjectOutputStream objectOutputStream = new ObjectOutputStream(fileOutputStream); 
objectOutputStream.writeObject(yourObject); 
objectOutputStream.close(); 

tải:

FileInputStream fileInputStream = yourContext.openFileInput(fileName); 
ObjectInputStream objectInputStream = new ObjectInputStream(fileInputStream); 
Object yourObject = (Object)objectInputStream.readObject(); 
objectInputStream.close(); 
+0

ArrayList người theo dõi; trong FollowerInfo này là một lớp serializable và tôi sử dụng những người theo dõi arraylist để thêm dữ liệu vào danh sách.tôi nghĩ rằng tôi cần phải lưu trữ hoặc cache arraylist.how này tôi có thể làm điều này ?. – jithu

+0

'ArrayLists' được tuần tự hóa theo mặc định, vì' FollowerInfo' cũng có thể tuần tự hóa được, bạn không nên có bất kỳ vấn đề gì khi lưu trữ/tải toàn bộ 'ArrayList'. – fardjad

+0

Làm thế nào tôi có thể áp dụng điều này trong mã của bạn? Có nghĩa là nơi tôi đặt danh sách mảng của tôi? ObjectOutputStream.writeObject (người theo dõi); và trên tải yourobject là loại tập tin, sau đó tôi muốn làm cho nó như arraylist một lần nữa? – jithu

0

Bạn có thể thực hiện việc này bằng cách lưu dữ liệu bị xuyên qua dịch vụ web vào Cơ sở dữ liệu SQLite, được cấu trúc phù hợp. Nếu bạn muốn nhận dữ liệu mới hơn bản ghi cuối cùng trong cơ sở dữ liệu của mình, bạn nên lưu giá trị khóa trong tệp SharedPreferences. Ví dụ:

Tôi muốn có được tất cả các sự kiện lịch từ một dịch vụ web,

Ngày nay, người dùng chỉ truy cập các sự kiện hồi tháng Giêng từ trường hợp không. 1 đến sự kiện không. 10 (lần đầu tiên, chúng được lấy thông qua dịch vụ web, được lưu trữ cục bộ trong Cơ sở dữ liệu SQLite, và sau đó được hiển thị bằng cách sử dụng con trỏ). Ngày mai, khi người dùng tải ứng dụng, dữ liệu đã truy xuất sẽ tải từ Cơ sở dữ liệu SQLite ('bộ nhớ cache') và người dùng sẽ chỉ nhận được các sự kiện mới hơn 10 thông qua dịch vụ web; và lặp lại quy trình của ngày hôm trước (tức là lưu trữ các truy vấn được truy xuất trong DB SQLite, và sau đó hiển thị tất cả chúng từ 1 đến 'x').

Trong trường hợp này, bạn lưu trữ các sự kiện từ 1 đến 10 trong cơ sở dữ liệu và bạn lưu trữ '11' trong tùy chọn được chia sẻ của mình để bạn biết điểm bắt đầu cho các thực thể tiếp theo. Tôi hy vọng tôi quản lý để hướng dẫn bạn.

Hãy nhìn vào các tùy chọn lưu trữ có sẵn trên Android: http://developer.android.com/guide/topics/data/data-storage.html

All the best :)

0

trường hợp của bạn là như thế một:

How to cache listview data in android?

Bạn cần phải quyết định xem bạn sẽ sử dụng một cơ sở dữ liệu SQL nếu bạn muốn mantain thông tin dài hơn thời gian tồn tại của ứng dụng, nếu không một adapter sẽ ổn.

Trên bản giới thiệu Api được cung cấp trên các mẫu cho gói SDK có một số ví dụ về Danh sách sử dụng ListAdapters. Ví dụ: List5.java.

+0

tôi có thể chèn danh sách array vào sql lite không? mà không thay đổi điều này thành chuỗi. – jithu

+0

Bạn có thể cung cấp câu trả lời chi tiết cho câu hỏi này không? –

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