我有一个登录会话ID,需要使用多个活动。如何在多个活动之间共享此公共数据?目前,我正在Intent中传递数据,但它无法正常工作。对于某些活动,我传递了一些其他数据,并且常见数据丢失了。
答案 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的近乎激烈的讨论。
我的结论是:请反驳任何结论
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
,然后在您的活动中调用getApplication
。 This 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.
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();