【问题标题】:Android - preserve value of variable through the lifecycle of an appAndroid - 在应用程序的生命周期中保留变量的值
【发布时间】:2015-07-24 11:06:20
【问题描述】:

我有一个移动应用程序,一旦安装,它必须生成一个随机的String,该应用程序必须在其整个生命周期内保存直到被卸载。

我正在考虑使用static variables,但正如here 发布的那样,如果我终止我的应用程序,静态变量将再次为空并重新初始化。

我需要做的是在安装APK的过程中创建一个随机字符串,并在安装应用程序时保持它的值,不管它是否被杀死。

有什么办法可以做到吗?

【问题讨论】:

  • 为此使用共享首选项
  • 然后尝试存储在 sharedpreferences 或 sqlite 数据库中
  • public static final int SEVEN = 7; 我猜永远是 7
  • 共享偏好更好
  • 为什么要投反对票?我认为这是一个带有明确疑问的明确问题......

标签: java android sharedpreferences persistence


【解决方案1】:

您需要使用SharedPreferences。如何获取和设置SharedPreference 的官方教程是here

【讨论】:

    【解决方案2】:
    When You install your app then you have to store value in shardeprefrence is better option for you
    

    【讨论】:

      【解决方案3】:

      使用共享偏好

      private static final String _KEY = "app_unique_key";
      private static final String _PREFERENCE = "preference";
      public void saveKey(String appKey) {
          SharedPreferences preferences = getSharedPreferences(_PREFERENCE, Context.MODE_PRIVATE);
          SharedPreferences.Editor preferenceEditor = preferences.edit();
          preferenceEditor.putString(_KEY, appKey);
          preferenceEditor.apply();
      }
      
      public String getAppKey() {
          SharedPreferences preferences = getSharedPreferences(_PREFERENCE, Context.MODE_PRIVATE);
          return preferences.getString(_KEY, null);
      }
      

      【讨论】:

        【解决方案4】:

        我认为您需要使用 SharedPreferences vars...如果您需要保存 int、floats 等,此方法仅用于 String 值...您可以创建不同的方法或仅在需要时应用代码.我认为最好的方法是在方法中,因为您不需要重复代码并且控制值更容易......请参阅下面的代码以了解使用 sharedPreferences:

        //Declaration of variables
        //This var is name from file of shared preferences, you can save a different files for SharedPreferences
        public String StartConfig_File = "sharedPref_StartConfig_File";
        
        //And this one is a SharedPreference var from my StartConfig_File
        public String userRemembered = "userRemembered";
        
        
        //Method to get String from SharedPreference
        public String Get_SharedPreferences(Context context, String sharedPref_File,String key_name){
        
            //Declaration of variables
            SharedPreferences sharedPref = context.getSharedPreferences(sharedPref_File, Context.MODE_PRIVATE);
            String result = sharedPref.getString(key_name, null);
        
            return result;
        }
        
        //Method to set String SharedPreference
        public void Set_SharedPreferences(Context context,String sharedPref_File, String key_name,String key_value){
        
            //Declaration of variables
            SharedPreferences sharedPref = context.getSharedPreferences(sharedPref_File,Context.MODE_PRIVATE);
            SharedPreferences.Editor editor = sharedPref.edit();
        
            editor.putString(key_name,key_value);
        
            editor.commit();
        }
        

        下面有一个示例来调用这个方法:

        //generalMethods is class where I have sharedPreferences methods! Change for your class...
        
        //Initialize values from SharedPreference
        generalMethods.Set_SharedPreferences(getActivity(),generalMethods.StartConfig_File,generalMethods.userRemembered ,"MyUser");
        
        //Get value from SharedPreference
        String result = generalMethods.Get_SharedPreferences(getActivity(), generalMethods.StartConfig_File, generalMethods.userRemembered );
        

        此变量仅在卸载应用程序时消失,如果您可以访问上下文,则始终可以获取此值...告诉我是否对您有帮助并进行良好的编程!

        【讨论】:

          【解决方案5】:

          是的,你是对的。如果您将创建一个静态变量,它会一直存在,直到您的应用程序运行,当它从后台清除时,您的变量值将为空。

          为此,有两种可能性可以解决您的问题:

          1. 使用共享首选项,但如果用户转到设置并从那里清除应用数据,您将失去价值

          2. 用户 Sqlite db 当用户清除应用程序数据或用户卸载应用程序时,您也会丢失数据。

          如果您的数据很大,则使用 2,否则 1 是最好的。坦克。

          【讨论】:

          • 我认为,清除数据也会删除 sqlite 数据库。或者您将数据库保存在外部存储器中
          • 我认为它也可以删除它......我会试试的。
          • @Sonhja 我错了,我自己检查了,使用时点击清除数据数据库也被清除,不便之处,敬请见谅。
          【解决方案6】:

          首先,我将在应用程序中创建字符串。为此,您需要创建一个扩展 android.app.Application 的类,将类名放在 AndroidManifest 应用程序标记中,然后用 this 覆盖 onCreate()

          public void onCreate() {
              super.onCreate();
              SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this);
              if (!prefs.containsKey("MY_KEY")) {
                  String random = generateYourRandomKey();
                  prefs.edit().putString("MY_KEY", random).apply();
              }
          }
          

          然后在项目的每个 Activity/Service/BrodcastReceiver 中,您可以使用读取值

          String random = PreferenceManager.getDefaultSharedPreferences(aContext).getString("MY_KEY");
          

          其中 aContext 是 Activity/Service 等的上下文。

          【讨论】:

            猜你喜欢
            • 2017-02-05
            • 1970-01-01
            • 2023-02-18
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2011-06-02
            • 1970-01-01
            • 2013-07-27
            相关资源
            最近更新 更多