在Android App中的多个活动之间共享变量

时间:2014-07-31 19:51:43

标签: java android

我让我的用户在我的应用上登录Facebook,Twitter和G +。登录后,我想知道他们已登录我的应用中的每个活动。我希望找到一种方法来解决每个活动。我知道您可以使用Intent将变量从活动传递到活动,如下所示:

            Intent intent = new Intent(MainActivity.this,
                    SecondActivity.class);
            intent.putExtra("loginMethod", "facebook");
            startActivity(intent);

但这对于10多项活动来说变得很麻烦。有没有更简单的方法?

4 个答案:

答案 0 :(得分:0)

您可以使用SharedPreferences。

这是一个很好的教程:

http://examples.javacodegeeks.com/android/core/content/android-sharedpreferences-example/

答案 1 :(得分:0)

我想要的是通过这种方式实现共享偏好

SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(getApplicationContext());
        SharedPreferences.Editor editor = preferences.edit();

editor.putstring("loginMethod","Facebook");
editor.commit;

并且只要您想检查loginMethod值,只需像这样调用首选项值...

SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(getApplicationContext());


String loginMethodValue = preferences.getString("loginMethod", "");

如果您需要更多助手,我将非常乐意为您提供帮助

答案 2 :(得分:0)

你有很多方法可以这样做。

  1. 将其存储在单件
  2. 使用SharedPreferences
  3. 您可以扩展应用程序上下文
  4. 更多信息here

答案 3 :(得分:0)

我建议你使用Singleton类。单身的最小内容是:

  1. 类类型的静态私有字段。
  2. 您需要的其他私人字段(" business"字段)。
  3. 私人构造函数。
  4. 返回唯一类实例的公共静态方法。
  5. 您需要的商业方法。
  6. 我通常将其称为 Store ,因为它扮演整个应用程序的公共存储角色。 例如:

    public class Store {
        private static Store me;
        private Facebook fb;
        private Twitter twitter;
    
        private Store() {
             this.fb=new Facebook();
             this.twitter=new Twitter();
        }
    
        public static Store get() {
             if (me==null) 
                 me=new Store();
             return me;
        }
    
        public void postInFaceBook(FBPost post) {
            this.fb.post(post);
        }
    
          ...
    }
    

    有时您需要在活动之间共享上下文。在这种情况下,我建议将应用程序上下文传递给get方法:

    public class Store {
        private static Store me;
        private Facebook fb;
        private Twitter twitter;
        private Context ctx;
    
        private Store(Context ctx) {
             this.ctx=ctx;
             this.fb=new Facebook();
             this.twitter=new Twitter();
        }
    
        public static Store get(Context ctx) {
             if (me==null) 
                 me=new Store(ctx);
             return me;
        }
    
        public void postInFaceBook(FBPost post) {
            this.fb.post(this.ctx, post);
        }
    
          ...
    }
    

    使用商店只是:

    public void m(FBPost p) {
        Store.get().postInFacebook(p);
    }
    

    第一次使用商店时,将创建唯一的实例(将由整个应用程序共享);第二次和下一次, get 方法将返回先前的现有实例。