【问题标题】:Android - Set variable once and use everywhere in appAndroid - 设置一次变量并在应用程序中随处使用
【发布时间】:2014-12-05 05:32:15
【问题描述】:

基本上我的问题是我想设置一个字符串给 A 或 B,由用户在第一个屏幕上选择。然后保存此字符串变量以用于应用程序中的其他活动。我在Android global variable 看到了帖子和许多类似的帖子。

但是变量需要设置,并且在每个活动中获取变量没有保存,一次然后可以在任何地方使用?

这是怎么做到的?

我希望我已经解释得足够好,因为我的问题与上面的不同。

变量不是最终的,它可以在第一个活动中更改,但我想在以下活动中使用它,而不必将其传递给每个活动。

提前感谢您的帮助。

【问题讨论】:

    标签: java android variables global-variables


    【解决方案1】:

    您可以将public classstatic String 变量一起使用,或者通过putExtra 方法将变量传递给另一个Activity

    例子:

    public class Global {
        public static final String DEVELOPER_KEY;
        public static final String PLAYLIST_ID;
    }
    

    【讨论】:

    • 使用putExtra 不是一个可行的选择,因为有很多变量我只是简化了这个问题的案例
    • @iqueqiorio 看我的例子,它非常直接和简单
    • 我做了一个这样的类,但不能在我的主要活动中使用变量我得到编译错误cannot find symbol
    • @iqueqiorio 你如何使用它?要设置它,你只需要使用Global.DEVELOPER_KEY = "abc"
    • @iqueqiorio 您必须在 mainactivity 中导入该类。
    【解决方案2】:

    我为了同样的目的做了一堂课:

    public class Constant {
    
        public static int NUMBER_OF_TILES;
    
        public static String setTilesId[] = {};
    
        public static String TilesDesc[] = {};
    
        public static String Image[] = {};
    
        public static String TilesName;
    
        public static int numberofbox = 0;
    
        public static boolean isLogedIn = false;
    
        public static String TilesSize = null;
    
        public static boolean from_activity = true;
    
        public static String URL_FOR_PRODUCT_ACTIVITY;
    
    }
    

    现在我可以在我的应用程序的任何地方使用这个变量了。

    【讨论】:

    • 我创建了一个名为 constants 的 java 类,然后在我的主要活动中尝试设置一个,并得到cannot find symbol
    • 有两种方法可以从另一个类中调用变量。在 mainactivity 中导入该类或使用Constant.TilesName
    • 通过使用Constant.TilesName,它会自动在你的mainactivity中导入Constant类。
    • 如何导入课程?所以我不需要Constant.name,我可以使用name
    • 我试过类似import android.activyt.calssname
    【解决方案3】:

    您可以将变量放入 SharedPreferences。因为它完全符合您的要求。 您可以将变量放在第一个屏幕中,并在应用程序的任何位置使用它。它也不是最终的,您可以随时更改它只会覆盖变量的现有值。

    最重要的是,即使应用程序关闭,它也会被保留。

    因此,每当用户下次启动您的应用程序时,您都可以使用该变量。

    【讨论】:

      【解决方案4】:

      A.java 代码:

        package p2;
        public class A{
      
               public static String abc;
      
        }
      

      在类 A 中声明静态字符串后,使用类名在包中的任何位置使用它,因为它是静态的,因此无论您将其更新为什么,值都将保持不变。

      B.java 代码:

       package p1;
       public class B{
      
             public void methodTest(){
      
                      String s = A.abc;    
      
            }
      
       }
      

      【讨论】:

        【解决方案5】:

        让你的字符串公开静态

        例如:public static String myvar="hey"//This will be available across all classes

        【讨论】:

          【解决方案6】:
          Instead of using static variable You can simply use Shared Preferences because after some time when your application is in background your static value become free automatically by garbage collector and become null
          
          
              public void setString(Context context, String value) {
                      SharedPreferences prefs = context.getSharedPreferences("setString",
                              0);
                      SharedPreferences.Editor editor = prefs.edit();
                      editor.putString("getString", value);
                      editor.commit();
          
                  }
          
                  public String getString(Context context) {
                      SharedPreferences prefs = context.getSharedPreferences("setString",
                              0);
                      String value = prefs.getString("getString", null);
          
                      return value;
          
                  }
          

          【讨论】:

          • 什么是垃圾收集器,这种情况经常发生吗?
          • 当你的应用程序停止时它会删除数据。但在 sharedpreference 中,即使应用停止也会保存数据。
          • 好的,是否需要在每个新活动中获取它?这段代码会去哪里?
          • 您只需在设置值的地方设置一次偏好,并且在每次新活动中您都会获得该值,或者您可以简单地做
          【解决方案7】:

          您也可以使用 SharedPreferences:

          SharedPreferences sets =getSharedPreferences(Choose_a_name, 0);
          SharedPreferences.Editor editor=sets.edit();
          editor.put string("from user", your string);
          editor.commit();
          

          在您的其他活动中,您可以再次检索、更改和保存它们。这样,您可以在活动生命周期内提供来自用户的自定义数据。即使您的任务被完全终止,您的数据也可以在下次启动时使用。

          从另一个活动中检索数据:

           SharedPreferences sets = getSharedPreferences(yourPrefName,0);
          String your string = sets.get string("from user", default value);
          

          我想为您提供与意图或静态类相比的替代想法。希望对你有帮助:)

          【讨论】:

            【解决方案8】:
            class SharedPref
            {
            
            public void setString(Context context, String value) {
                        SharedPreferences prefs = context.getSharedPreferences("setString",
                                0);
                        SharedPreferences.Editor editor = prefs.edit();
                        editor.putString("getString", value);
                        editor.commit();
            
                    }
            
                    public String getString(Context context) {
                        SharedPreferences prefs = context.getSharedPreferences("setString",
                                0);
                        String value = prefs.getString("getString", null);
            
                        return value;
            
                    }
            }
            
            
            and use this class like
            
            SharePref pref=new SharedPref();
            
            pref.setString("Hellooo");
            
            
            String value=pref.getString();
            

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2012-10-03
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多