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

时间:2011-10-25 06:03:04

标签: android

我有一个登录会话ID,需要使用多个活动。如何在多个活动之间共享此公共数据?目前,我正在Intent中传递数据,但它无法正常工作。对于某些活动,我传递了一些其他数据,并且常见数据丢失了。

9 个答案:

答案 0 :(得分:14)

使用这样的共享偏好:

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

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

答案 1 :(得分:7)

答案 2 :(得分:7)

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

在其他活动/类中,用于将值设置为:

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;

答案 3 :(得分:2)

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

答案 4 :(得分:2)

阅读有关SharedPreferences的文档和关于Singleton vs Application in android的近乎激烈的讨论。

我的结论是:请反驳任何结论

  • SharedPreferences:如果您打算只保留基元,并且容易保留不同的地块,那就太好了。
  • Parcelable:一个低级别的解决方案,有很多样板代码,您可以在Extras中使用
  • Serializable:如果你不想打扰Parcelable。请参阅this
  • Singleton:我的选择。简单,快速,无需样板。我的贡献是使用Map里面的灵活性。

    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);
        }
    }
    
  • 应用程序:几乎和单身人士一样,但是对于一些隐藏的原因,可以简化测试和更多的机器人标准化的做事方式。

答案 5 :(得分:1)

执行此操作的一种方法是扩展Application,然后在您的活动中调用getApplicationThis site有一些例子。

答案 6 :(得分:1)

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

在您当前的活动中,创建一个意图

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

答案 7 :(得分:0)

我这样做的方法是从Activity扩展一个全局类,然后扩展用户将与之交互的所有实际活动。这就是我学会用我买的一些“学会编写Android机器人”的书来学习的。

这与使用Application类非常相似。

答案 8 :(得分:0)

You can store it in SharedPreferences or in Singleton class. where i would suggest to use singleton class.

  • SharedPreferences :

Write value

SharedPreferences mPref= this.getSharedPreferences("session", MODE_WORLD_READABLE);
mPref.edit().putString("session_id", your_session_value).commit();

Read Value

SharedPreferences mPref= getSharedPreferences("session", MODE_WORLD_READABLE);
String sSession_id= mPref.getString("session_id", null);
  • Singleton class

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

Write to singleton

Session mSession  = Session.getInstance();
mSession.setSessionId("your_session_id");

Read from singleton

Session mSession  = Session.getInstance();
String mSessionId = mSession.getSessionId();