2010-11-17 25 views
6

Tôi khá mới trong lập trình Android/Java, vì vậy một số nội dung cơ bản vẫn còn khá khó hiểu. Vì vậy, cho phép ứng dụng của tôi nhận được tất cả dữ liệu (các bài báo) yêu cầu từ các tệp XML bên ngoài, nó phân tích chúng thành các mô hình dữ liệu (lớp Bài viết) và các bài viết đó sẽ được sử dụng (hiển thị trong danh sách hoặc bài viết đơn). vòng đời.Tôi nên lưu trữ toàn bộ dữ liệu/bộ nhớ cache trên toàn cầu cho toàn bộ vòng đời của ứng dụng?

Tôi nên giữ chúng ở đâu? Tôi có thể tạo lớp đơn với một mảng chứa tất cả các bài báo tôi đã phân tích cú pháp không? Hoặc tôi nên lưu chúng vào cơ sở dữ liệu và sau đó truy vấn nó theo yêu cầu? (Nghe có vẻ như quá nhiều công việc, tôi không cần phải lưu chúng vào lúc này) Thực hành tốt nhất ở đây là gì?

Trả lời

2

Giữ chúng trong Application. Đây là một lớp cơ sở của bất kỳ ứng dụng Android nào và nó vẫn còn hoạt động trong suốt toàn bộ vòng đời của ứng dụng, trong khi các Hoạt động bị giết khi không hiển thị hoặc định hướng được thay đổi.

Bạn phải khai báo android:name trong AndroidManifest.xml của bạn:

<application android:name=".YourApplication"/> 

được sửa đổi:

Đây cũng là liên quan: How do I pass data between Activities/Services within a single application?

+0

Điều đó có khiến lớp học quá lộn xộn không? Đặc biệt, nếu tôi sẽ giữ nhiều dữ liệu hơn (mảng) trong đó và các phương thức dành riêng cho việc quản lý (thêm, thay đổi, tìm kiếm) dữ liệu đó. – sniurkst

+0

Đó là quyết định thiết kế của bạn. Tôi chỉ nói rằng ứng dụng có thể truy cập được tất cả các hoạt động và là nơi thích hợp để lưu trữ dữ liệu được chia sẻ gắn liền với vòng đời của ứng dụng, không phải là vòng đời của hoạt động. –

+0

Bạn có thể đặt dữ liệu trực tiếp vào Ứng dụng hoặc bạn có thể đặt nó vào một lớp chuyên biệt và có tham chiếu đến nó bên trong Ứng dụng. –

1

điều đó phụ thuộc phong cách lập trình của bạn là gì lol.

bạn có thể như bạn đã nói tạo một singleton sẽ đọc xml của bạn và lưu trữ mọi thứ.

bạn có thể tạo băm tĩnh trong lớp học của mình. theo cách này khi bạn tạo một đối tượng mới, bạn sẽ có quyền truy cập vào thông tin tĩnh từ lớp đó.

bạn có thể chuyển thông tin từ lớp này sang lớp khác dưới dạng tham số.

nếu bạn muốn chúng tôi cho bạn biết cái nào là tốt nhất thì sẽ rất khó mà không biết kiến ​​trúc của chương trình của bạn.

ví dụ bạn có thể có bộ điều khiển chế độ xem xử lý mọi thay đổi và sau đó lưu trữ dữ liệu ở cấp đó thật đơn giản để chuyển nó khi bạn chuyển chế độ xem.

bạn có thể có chế độ xem tĩnh trong đó bạn có thể trực tiếp đặt tất cả các giá trị khi bạn mở chúng.

bạn có thể có các chế độ xem được liên kết với nhau mà không cần bất kỳ bộ điều khiển nào xử lý chuyển đổi và trong trường hợp đó, bạn có thể muốn có cách thu thập thông tin bạn cần từ một phương thức tĩnh hoặc ...

+0

Vâng, lý tưởng, tôi muốn có một lớp mà: sẽ có thể truy cập vào tất cả các hoạt động, sẽ lưu trữ một mảng các đối tượng và có thể quản lý mảng đó (thêm nhiều đối tượng hơn, lấy đối tượng theo vị trí của nó trong mảng hoặc một số loại của tài sản) nếu điều đó làm cho câu hỏi của tôi rõ ràng hơn. – sniurkst

0

Miễn là bạn đảm bảo rằng bạn không có bất kỳ chủ đề nào hoạt động trên dữ liệu được chia sẻ, bạn chỉ có thể tạo một lớp tĩnh với các thành viên tĩnh. mỗi hoạt động sẽ có thể truy cập nó. Nếu sử dụng tải xuống không đồng bộ cho dữ liệu của bạn thì trong trình xử lý onPostExecute của trình xử lý, bạn có thể chạm vào GlobeVars vì nó chạy trên chuỗi giao diện người dùng.

public class GlobalVars { 
    public static String userId = "?"; 
    //public static String serverUrl = "10.0.2.2"; //localhost when developing 
    public static String serverUrl = "192.168.1.4"; //on device to laptop 
    //public static String serverUrl = "102.192.293.10"; //production 
    public static Book currentBook = null; 
    public static Chapter currentChapter = null; 
    public static int lastclickedChapter = -1; 
    public static Voice currentVoice = null; 
    public static String catalogJson = ""; 
    public static ArrayList<Book> catalogItems = null; 
} 

onCreate của MainActivity tôi có thể thiết lập các cửa hàng vào danh sách tải về của tôi về xml coverted các đối tượng

GlobeVars.catalogItems = downloaded xml to object list 

trong SubActivity của tôi mà là một danh sách các chương trong OnClickListener tôi có thể thiết lập:

GlobeVars.currentChapter = items[clickeditem]; 

khi bạn quay lại hoạt động chính, các giá trị sẽ vẫn được đặt.

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