如何在Android中的多个活动之间共享相同的数据?

我有一个login会话ID多个活动需要使用。 我如何在多个活动之间共享这个共同的数据? 目前,我通过意向传递数据,但它不正常工作。 对于某些活动,我传递了一些其他数据,并且常见的数据丢失。

一种方法是扩展Application ,然后在您的活动中调用getApplication 。 这个网站有一些例子。

使用像这样的共享首选项:

 SharedPreferences myprefs= this.getSharedPreferences("user", MODE_WORLD_READABLE); myprefs.edit().putString("session_id", value).commit(); 

你可以像这样在你的应用程序中检索这个信息:

 SharedPreferences myprefs= getSharedPreferences("user", MODE_WORLD_READABLE); String session_id= myprefs.getString("session_id", null); 

当您想要从当前活动开始另一个活动时,您应该使用意图…如果孩子活动完全依赖于来自父活动的数据…使用意图

  • 使用Application类来共享公共数据。
  • 使用共享首选项或数据库或某种持久性存储。

使用Singleton类进行共享。

示例代码

 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; } } 

在其他Activity / Class中设置值为:

 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; 

您应该按照以下详细信息使用sharedpreferences: http://developer.android.com/guide/topics/data/data-storage.html#pref

阅读关于SharedPreferences的文档以及关于Singleton vs Application的讨论。

我得出结论:请反驳任何结论

  • SharedPreferences:如果你打算只保留原语,很容易保存不同的地块。
  • Parcelable:低级解决scheme,有很多样板代码,可以在Extras中使用
  • 可串行化:如果你不想打扰Parcelable。 看到这个
  • 辛格尔顿:我的select。 简单,快速,没有样板。 我的贡献是使用灵活的内部地图。

     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); } } 
  • 应用程序:几乎相同的单身人士,但对于一些隐藏的原因,缓解testing和更多的android标准化的做事方式。

我不知道你正在处理的是什么代码,但你有没有这样的尝试

在你目前的活动中,创build一个意图

 Intent i = new Intent(getApplicationContext(), ActivityB.class); i.putExtra(key, value); startActivity(i); 

那么在其他活动中,检索这些值。

 Bundle extras = getIntent().getExtras(); if(extras !=null) { String value = extras.getString(key); } 

我做的方式是从Activity扩展一个全局类,然后扩展用户与之交互的所有实际活动。 这就是我学会如何做一些“学习代码为Android”的书我买了。

这和使用Application类非常相似。