【问题标题】:How to retain the global variebles when application is upgraded to new version in android?android中应用升级到新版本时如何保留全局变量?
【发布时间】:2012-11-07 05:49:48
【问题描述】:

在我的 android 应用程序中,用户必须通过同意提供其电子邮件 ID 的条款和条件进行注册。如果用户将应用程序升级到下一个版本,我不应该得到协议页面或电子邮件注册窗口。我正在使用全局变量来控制它,但是如果用户将应用程序升级到更新版本,全局变量会被重置,因此用户会再次获得协议页面和注册窗口。那么我该怎么做呢?提前感谢您的帮助。

【问题讨论】:

    标签: android versioning upgrade


    【解决方案1】:

    您有两种方法可以在本地媒体上存储数据。

    • Shared Preference
    • SQLite Database

    什么时候应该使用共享偏好?

    如果您的存储变量数量不多并且应该是原始值,那么您可以使用 Shared Preference

    示例代码见This

    或者

    什么时候应该使用 SQLite 数据库?

    如果你必须存储变量的数量并且不是原始的,并且你需要很长时间的数据,那么你应该使用SQLite Database

    示例代码见This

    现在是 Depends on you as per your requirement.

    【讨论】:

    • 如果您能详细了解如何在这种情况下有效地使用共享首选项,将会更加有用
    • 感谢 Manoj 的指导。我很感激。
    【解决方案2】:

    你可以使用SharedPreferences

    class VersionInfo {
    
    private VersionInfo() {}
    
    private static final String PREF_VERCODE = "VERCODE";
    
    public static final VersionInfo INSTANCE = new VersionInfo();
    
    void setVersionCode(Context ctx, int ver) {
         PreferenceManager.getDefaultSharedPreferences(ctx).edit().putInt(PREF_VERCODE, ver).commit();
        }
    
    int getVersionInfo(Context ctx) {
    PreferenceManager.getDefaultSharedPreferences(ctx).getInt(PREF_VERCODE, 1);
    }
    }
    

    【讨论】:

      【解决方案3】:

      我使用这段代码在我的应用程序中显示 ChangeLog 以检测版本是否已更改并相应地显示 ChangeLog。相同的逻辑可用于显示或不显示协议,视情况而定。

      这些是我的全局声明:

      // FOR STORING VERSION CODE IN SHAREDPREFERENCES
      private static final String PRIVATE_PREF = "my_app_name";
      private static final String VERSION_KEY = "version_number";
      
      
      try {
              // GET THE PREFERENCE SET FOR THE CHANGELOG
          final SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(getBaseContext());
      
          final boolean showChanges = prefs.getBoolean("displayChangelog", false);
      
          PackageInfo pkgInfo = getPackageManager().getPackageInfo(getPackageName(), 0);
      
          // SET THE CURRENT VERSION IN SHAREDPREFERENCES
          SharedPreferences sharedPrefs = getSharedPreferences(PRIVATE_PREF, Context.MODE_PRIVATE);
      
          // SAVED VERSION CODE
          int savedVersionCode = sharedPrefs.getInt(VERSION_KEY, 0);String.valueOf(savedVersionCode));
      
          // GET NEW VERSION CODE
          int currentVersionCode = pkgInfo.versionCode;String.valueOf(currentVersionCode));
      
          Editor editor = sharedPrefs.edit();
          editor.putInt(VERSION_KEY, currentVersionCode);
          editor.commit();
      
          if (showChanges == false)   {
      
              /*****  DISPLAY THE CHANGELOG   *****/
              // DISPLAY DIALOG WHEN THE APPLICATION IS INSTALLED FOR THE FIRST TIME
                  SharedPreferences.Editor editor = prefs.edit();
                  editor.putBoolean("displayChangelog", true);
          editor.commit();
      
          } else if (showChanges == true && currentVersionCode > savedVersionCode)    {
      
              /*****  DISPLAY THE CHANGELOG AFTER AN UPGRADE  *****/
              // DISPLAY DIALOG CHANGELOG AFTER AN UPGRADE
                  SharedPreferences.Editor editor = prefs.edit();
                  editor.putBoolean("displayChangelog", true);
          editor.commit();
              }
      
          } catch (Exception e) {
              e.printStackTrace();
          }
      

      编辑:除此代码外,我还使用Preferences XML 文件为用户提供再次查看 ChangeLog 的能力,并存储用户偏好状态以显示 ChangeLog 在下次运行时。相应的 XML:

      <PreferenceCategory
          android:key="changeLogOptions"
          android:title="Changelog Options" >
          <Preference
              android:key="changeLog"
              android:summary="See what has changed in the current version"
              android:title="What\&apos;s New" >
          </Preference>
          <CheckBoxPreference
              android:defaultValue="false"
              android:key="displayChangelog"
              android:summary="@string/settings_changelog"
              android:title="Hide The Changelog" >
          </CheckBoxPreference>
      </PreferenceCategory>
      

      【讨论】:

        猜你喜欢
        • 2012-08-01
        • 2020-04-30
        • 1970-01-01
        • 2019-09-05
        • 2011-12-20
        • 2020-05-27
        • 2020-09-29
        • 2015-08-13
        • 2016-02-26
        相关资源
        最近更新 更多