【问题标题】:Saving the version of my database in SharedPreferences在 SharedPreferences 中保存我的数据库版本
【发布时间】:2016-04-26 08:25:00
【问题描述】:

我正在尝试向我的数据库添加一个版本。我跟着this answer 这样做了。问题是,每次我拨打GetDefaultSharedPreferences 时,似乎都找不到我存储的版本。这是我的代码:

public Database() {
    var dbPath = DatabasePath;
    int dbVersion;

    ISharedPreferences sharedPrefs = PreferenceManager.GetDefaultSharedPreferences (Application.Context);
    dbVersion = sharedPrefs.GetInt ("db_ver", 0);

    if (!File.Exists (dbPath) || dbVersion != DATABASE_VERSION) {
        CreateDatabase (dbPath);
    }

    database = new SQLiteConnection (dbPath);
}

void CreateDatabase(string dbPath) {
    var s = Application.Context.Assets.Open (originalDBLocation);
    var writeStream = new FileStream (dbPath, FileMode.OpenOrCreate, FileAccess.Write);
    ReadWriteStream (s, writeStream);
    writeStream.Close ();
    ISharedPreferences sharedPrefs = PreferenceManager.GetDefaultSharedPreferences (Application.Context);
    ISharedPreferencesEditor editor = sharedPrefs.Edit ();
    editor.PutInt ("db_ver", DATABASE_VERSION);
    editor.Commit();
}

当我在构建后第一次运行代码时,dbVersion 始终为 0。我是否更改 DATABASE_VERSION 都没有关系。当我关闭手机上的应用程序并再次打开它时,正确的版本被放入dbVersion。所以我猜重新安装应用程序时共享首选项会被删除?在我使用它们的其他应用程序中,情况并非如此。

有人知道我该如何解决这个问题吗?

提前致谢。

【问题讨论】:

  • 所以你想在用户卸载应用程序后存储最后一个数据库版本?
  • 试试 editor.apply();而不是 editor.Commit(); :)
  • @DevendraSingh 是的,基本上。我认为 SharedPreferences 做到了这一点,因为它在我的应用程序中使用它的其他任何地方都这样做。
  • @SandeepBhandari 它保持不变......
  • 使用 defaultSharedPreference 的任何具体原因???

标签: android sqlite xamarin xamarin.android android-sqlite


【解决方案1】:

我建议,您将数据库版本保存在数据库本身中。这将避免冲突(保存的版本与实际的数据库版本),并将这些东西放在一起。

考虑不必要的数据库调用是好的,但有几点需要考虑。因此,任何对设置的访问都需要时间(数据库、文件或首选项),但开销不同。但是由于您在每个应用程序生命周期中只需要一次,因此可能没问题。更好地继续优化重复事件和数据库访问。

【讨论】:

  • 这可能会奏效,但我正在尝试尽量减少不必要的数据库调用。
  • 我认为,如果在应用启动时只需要一次调用,这可能是合理的。它还避免了冲突(保存版本与实际数据库版本)
  • 好的,我试试看。
  • 好的,我稍微改变一下我的答案,所以它不像是评论
  • 当数据库尚未初始化时,如何从数据库中获取版本?
【解决方案2】:

SharedPreferences 在重新安装时被删除。

您可以将应用的SharedPreferences(和其他应用数据)备份到用户的 Google 云存储中。

SharedPreferencesBackupHelper @https://developer.xamarin.com/api/type/Android.App.Backup.SharedPreferencesBackupHelper/

BackupAgentHelper @https://developer.xamarin.com/api/type/Android.App.Backup.BackupAgentHelper/

数据备份 http://developer.android.com/guide/topics/data/backup.html

【讨论】:

  • 这很奇怪。在我的代码中的其他地方我使用sharedPrefs = GetSharedPreferences("data", FileCreationMode.Private);,它在重新安装后存储。
  • @FrederickEskens 这很奇怪,因为删除应用程序会导致与应用程序关联的 perfs 被删除(即 Android 操作系统不会留下会使文件系统混乱的悬空关联。)现在你可以只需将版本写入文本文件即可。
【解决方案3】:

你可以试试这个,

public static final String MyPREFERENCES = "MyDBVersion" ;
SharedPreferences sharedpreferences;

sharedpreferences = getSharedPreferences(MyPREFERENCES, Context.MODE_PRIVATE);
SharedPreferences.Editor editor = sharedpreferences.edit();
editor.PutInt ("db_ver", DATABASE_VERSION);
editor.commit();

当你想检索相同的:)

sharedpreferences.getInt("db_ver", 1.0);

【讨论】:

  • 正如我在 cmets 中所说,Database.cs 不是活动或任何东西,我不能使用GetSharedPreferences(name, mode)
猜你喜欢
  • 2017-02-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-06-11
  • 1970-01-01
相关资源
最近更新 更多