Android应用程序,提供两种在活动之间传递数据的解决方案(No Intent Extras Please!)
public class A {
public static LinkedHashMap<String,String> hashStore = new LinkedHasMap<String,String>();
public void doHttp(){
//Some HTTP call and store some json value
hashStore.put("data","jsonKeyValue");
}
public void onDestroy(){
hashStore.remove(key);// remove data key
hashStore.clear();
}
}
public class B {
public void getHttp(){
//Some HTTP call
String extra = A.hashStore.get("data");
}}
// SharedPreference Call
public class A{
SharedPreference hashPref ; //declaration on onCreate
public void dohttp(){
//Some Http and Store value in SharedPreferences
hashPref.put("data","jsonkeyvalue");
hashPref.apply();
}}
public class B{
SharedPreference hashPref ; //declaration on onCreate
public void getHttp(){
//Some HTTP call
String extra = hashPref.get("data");
}}
答案 0 :(得分:2)
根据许多原则(high cohesion, decoupling, minimice dependency, Protected Variations...),将您的活动用作静态数据源,让您的其他活动依赖它(甚至知道此活动存在)是一种不好的做法,但是android团队已经你可以依赖一些类似的方法,但出于同样的原因,它们不应该是第一个选择。
我更喜欢的是:
如果数据必须是持久的:
如果你不需要持久化数据
你可以在这个Android官方faq page或这个伟大的SO answer中找到更多信息,这是基于该常见问题,但有一些代码示例
答案 1 :(得分:1)
如上所述,
对于大型数据组&gt; 30-40键我建议你使用SQLite。它比SharedPreferences更强大,并且可以根据您要搜索的键进行查询。
另一方面,实现SQLite比使用SharedPreferences更复杂,代码更长。
拥有静态的LinkedHashMap或任何其他静态变量对于代码维护和可读性来说绝不是一个好的选择,只有在没有其他选项时才应该使用它。
希望它有所帮助。 :)