2010-07-30 26 views
6

Mục đích trong Android là một cách thanh lịch để truyền thông điệp giữa các thành phần chưa được tách, nhưng nếu bạn muốn gửi thêm dữ liệu với Intent thì sao? Tôi biết bạn có thể thêm các loại giá trị khác nhau và các đối tượng thực thi Parcelable, như phần bổ sung, nhưng điều này không thực sự phục vụ cho việc gửi các kiểu do người dùng xác định cục bộ (tức là không phải trên giao diện từ xa). Bất kỳ ý tưởng?Làm cách nào để gửi các đối tượng dữ liệu tùy chỉnh có Intents trong Android?

Trả lời

0

Khi bạn nói cục bộ, điều đó có nghĩa là gửi các loại do người dùng xác định trên các Hoạt động/Dịch vụ cục bộ thuộc cùng một APK không? Miễn là loại do người dùng định nghĩa có thể chuyển nhượng được, nó có thể được gửi dưới dạng tính năng bổ sung theo ý định và có thể được xử lý trong onStartCommand() của dịch vụ/hoạt động.

+0

tại địa phương như trong không qua aidl, và tất cả trong quá trình tương tự, cùng một ứng dụng. Vấn đề là, việc triển khai gói cho các kiểu dữ liệu tùy chỉnh phức tạp thực sự có thể khá đau đớn, khi tất cả những gì tôi cần làm là chuyển một đối tượng với Intent ... – MalcomTucker

1

Nếu bạn muốn vượt qua các đối tượng trong một quá trình duy nhất bạn có thể thực hiện riêng Application để duy trì trạng thái toàn cầu của bạn:

lớp cơ sở cho những người cần phải duy trì trạng thái ứng dụng toàn cầu. Bạn có thể cung cấp thực hiện riêng của bạn bằng cách xác định tên của nó trong thẻ AndroidManifest.xml của của bạn, mà sẽ gây ra lớp đó là khởi tạo cho bạn khi quá trình cho application/gói của bạn là tạo.

+0

ok, vậy hãy sử dụng Ứng dụng như một loại môi giới/lưu trữ cho dữ liệu được chia sẻ? – MalcomTucker

+0

chính xác, bạn có thể thực hiện nó như một kho lưu trữ nếu bạn cần nó –

4

Trong loại, bạn có thể thực hiện các giao diện Serializable và gọi phương thức Intent.putExtra(String, Serializable) bao gồm nó trong mục đích. Tôi đã xem xét tự mình làm một vấn đề tương tự, nhưng đã chọn chỉ đưa dữ liệu vào một nhóm vì loại của tôi chỉ có hai trường và nó không đáng để nỗ lực.

Đây là cách nó có thể làm việc, giả định rằng bạn đã thực hiện Serializable trên Foo:

Foo test = new Foo(); 
test.Name = "name"; 
test.Value = "value"; 

Intent intent = new Intent(); 
intent.putExtra("test", test); 
Các vấn đề liên quan