Tôi có ID phiên đăng nhập mà nhiều hoạt động cần sử dụng. Làm cách nào để chia sẻ dữ liệu chung này giữa nhiều hoạt động? Hiện tại, tôi đang chuyển dữ liệu trong Intent nhưng nó không hoạt động đúng. Đối với một số hoạt động, tôi chuyển một số dữ liệu khác và dữ liệu chung bị mất.Cách chia sẻ cùng một dữ liệu giữa nhiều hoạt động
Trả lời
- Sử dụng Application class để chia sẻ dữ liệu chung.
- Use Shared Prefrences or databases or some sort of persistant storage.
Bạn nên sử dụng sharedpreferences theo dưới đây chi tiết, http://developer.android.com/guide/topics/data/data-storage.html#pref
Sử dụng chia sẻ sở thích như thế này:
SharedPreferences myprefs= this.getSharedPreferences("user", MODE_WORLD_READABLE);
myprefs.edit().putString("session_id", value).commit();
Bạn có thể lấy thông tin này trên ứng dụng của bạn như thế này:
SharedPreferences myprefs= getSharedPreferences("user", MODE_WORLD_READABLE);
String session_id= myprefs.getString("session_id", null);
Bạn nên sử dụng ý định khi bạn muốn bắt đầu một hoạt động khác từ hoạt động hiện tại của bạn ... cũng nếu hoạt động của trẻ là totall y phụ thuộc vào dữ liệu từ hoạt động cha mẹ ... ý đồ sử dụng
Tôi không biết chính xác những gì đang bạn đang đối phó với, nhưng có bạn đã cố gắng như thế này
trong hoạt động hiện tại của bạn, tạo ra một ý định
Intent i = new Intent(getApplicationContext(), ActivityB.class);
i.putExtra(key, value);
startActivity(i);
sau đó trong hoạt động khác, hãy truy xuất các giá trị đó.
Bundle extras = getIntent().getExtras();
if(extras !=null) {
String value = extras.getString(key);
}
Sử dụng lớp Singleton để chia sẻ.
mẫu mã
public class Category {
private static final Category INSTANCE = new Category();
public String categoryName = "";
public int categoryColor = 0;
public boolean status = false;
// Private constructor prevents instantiation from other classes
private Category() {}
public static Category getInstance() {
return INSTANCE;
}
}
trong Hoạt động khác/lớp để thiết lập các giá trị như:
Category cat;
cat=Category.getInstance();
cat.categoryName="some name";
cat.status=ture;
for getting the values every where you want in your application.
Category cat;
cat=Category.getInstance();
String sq=cat.categoryName;
boolean stat=cat.status;
Cách mà tôi làm là tôi thừa kế một lớp toàn cầu từ Hoạt động, và sau đó mở rộng tất cả các hoạt động thực tế mà người dùng sẽ tương tác với nó. Đó là cách tôi đã học để làm điều đó với một số "tìm hiểu mã cho android" sách tôi đã mua.
Điều này khá giống với việc sử dụng lớp Ứng dụng.
Điều gì về rò rỉ bộ nhớ? làm thế nào để bạn chia sẻ dữ liệu? – Nico
Sau khi đọc tài liệu về SharedPreferences và thảo luận gần giống với flamewar về Singleton vs Application in android.
tôi kết luận: Xin bác bỏ bất kỳ kết luận
- SharedPreferences: Tốt nếu bạn có kế hoạch để giữ chỉ nguyên thủy, và dễ dàng để giữ bưu kiện khác nhau.
- Khuyên: Một giải pháp cấp thấp, với nhiều mã bản mẫu, bạn có thể sử dụng trong Extras
- Có thể lập lại: Nếu bạn không muốn làm phiền với Parcelable. Xem this
Singleton: Lựa chọn của tôi. Đơn giản, nhanh chóng và không có bản mẫu. Đóng góp của tôi là sử dụng Bản đồ bên trong để linh hoạt.
public class Config { private static Config instance; private HashMap<String, Object> map; /*Keep doc about keys and its purpose if needed*/ public static final String TOKEN = "token"; public static final String SESSION = "sessionId"; /** A bean with A LOT of useful user info */ public static final String USER_BEAN = "userBean"; private Config() { map = new HashMap<String, Object>(); } public static final Config getInstance() { if (instance == null) { instance = new Config(); } return instance; } public void setKey(String key, Object value) { map.put(key, value); } public Object getKey(String key) { return map.get(key); } }
Ứng dụng: Hầu như giống như singleton, nhưng đối với một số lý do hide-to-me, dễ dàng kiểm tra và cách chuẩn hoá android hơn để làm việc.
Bạn có thể lưu trữ trong SharedPreferences hoặc trong lớp Singleton. nơi tôi sẽ đề nghị sử dụng lớp singleton.
- SharedPreferences:
Viết giá trị
SharedPreferences mPref= this.getSharedPreferences("session", MODE_WORLD_READABLE);
mPref.edit().putString("session_id", your_session_value).commit();
đọc Value
SharedPreferences mPref= getSharedPreferences("session", MODE_WORLD_READABLE);
String sSession_id= mPref.getString("session_id", null);
Singleton lớp
public class Session { private static Session session = null; private String mSessionId; private Session() { } public static Session getInstance() { if (session == null) { session = new Session(); } return session; } public String getSessionId() { return mSessionId; } public void setSessionId(String pSessionId) { this.mSessionId = pSessionId; } }
Viết thư cho Singleton
Session mSession = Session.getInstance();
mSession.setSessionId("your_session_id");
đọc từ singleton
Session mSession = Session.getInstance();
String mSessionId = mSession.getSessionId();
- 1. Chia sẻ cơ sở dữ liệu sqlite giữa nhiều Hoạt động Android
- 2. MVVM: Chia sẻ dữ liệu giữa ViewModels
- 3. Chia sẻ dữ liệu giữa AppDomains
- 4. Cơ sở dữ liệu SQLite Android được chia sẻ giữa các hoạt động
- 5. Cách chia sẻ cùng một biến giữa các mô-đun?
- 6. Cách chia sẻ logic nghiệp vụ giữa nhiều ứng dụng
- 7. Chia sẻ dữ liệu giữa các liên kết người dùng
- 8. Chia sẻ dữ liệu giữa các quy trình trong Python
- 9. Chia sẻ dữ liệu giữa các ứng dụng trên iDevice
- 10. biến chia sẻ giữa hai luồng hoạt động khác với thuộc tính được chia sẻ
- 11. Angularjs chia sẻ dữ liệu giữa các bộ điều khiển
- 12. Phong cách SOA - Chia sẻ dữ liệu
- 13. Cách cấu trúc dữ liệu Firebase và quy tắc chia sẻ dữ liệu giữa người dùng?
- 14. Chia sẻ cơ sở dữ liệu giữa Twisted và Django
- 15. Chia sẻ dữ liệu cục bộ (như với ổ cắm) giữa nhiều chương trình trong C++
- 16. Cách ngăn chặn nhiều cửa sổ trình duyệt chia sẻ cùng một phiên trong asp.net
- 17. Chia sẻ một biến giữa nhiều chủ đề khác nhau
- 18. Chia sẻ hệ thống dữ liệu rộng
- 19. Chia sẻ cùng một biến giữa nhiều chương trình độc lập trong Linux
- 20. Cách chia sẻ dữ liệu giữa các luồng khác nhau Trong C# bằng AOP?
- 21. phiên chia sẻ giữa WARs
- 22. C++, cách chia sẻ dữ liệu giữa các quy trình hoặc chủ đề
- 23. Cách chia sẻ dữ liệu giữa các lớp riêng biệt trong Java
- 24. Đa xử lý Python: Làm cách nào để chia sẻ một dict giữa nhiều quy trình?
- 25. Bộ nhớ chia sẻ giữa nhiều phiên bản AWS EC2
- 26. Làm cách nào để chia sẻ dữ liệu giữa các tác vụ Ant tùy chỉnh?
- 27. Hudson/Jenkins: chia sẻ thông số giữa nhiều công việc
- 28. Cách tốt nhất để sử dụng tùy chọn chia sẻ giữa các hoạt động
- 29. Tôi làm cách nào để chia sẻ một dịch vụ giữa các hoạt động mà không cần khởi động lại?
- 30. Kiến trúc - Nhiều ứng dụng web hoạt động trên cùng một dữ liệu
những gì bạn muốn vượt qua chính xác? Và đăng mã của bạn ở đây –
Bạn có thể chia sẻ dữ liệu thông qua ý định hoặc bạn có thể tạo 1 lớp toàn cầu và truy cập dữ liệu thông qua đó ... dữ liệu thông qua ý định rất đơn giản..chỉ cần phải đưa dữ liệu của bạn vào intent.putExtra (kiểu dữ liệu thích hợp) phương pháp và chia sẻ nó qua nhiều hoạt động ... – android
Tôi có Đăng nhập trong ứng dụng của mình ở chỗ tôi sẽ nhận được sessionid tôi cần sử dụng nó trên tất cả các hoạt động mà bao giờ đến sau khi đăng nhập cũng tôi cần phải vượt qua một số dữ liệu khác để hoạt động tiếp theo (bao gồm cả sessionid) .Làm thế nào tôi đang cố gắng với ý định nhưng đôi khi nó chuyển hướng sang các hoạt động khác. – Harish