Backup SharedPreferences in Android?

别等时光非礼了梦想. 提交于 2019-11-30 05:31:08

问题


I would like to backup a value in SharedPreferences so that I can read out this value after a reinstall.

My code does not work and I do not know what is the mistake.

MyBackupAgent

package com.app.appname;
import android.app.backup.BackupAgentHelper;
import android.app.backup.BackupManager;
import android.app.backup.SharedPreferencesBackupHelper;
import android.content.Context;

public class MyBackupAgent extends BackupAgentHelper{
 static final String PREFS_DISPLAY = "AppName"; 
 private Context context;
 static final String MY_PREFS_BACKUP_KEY = "keyToStore"; 

    public MyBackupAgent(Context context){
        this.context = context;
        SharedPreferencesBackupHelper helper = 
              new SharedPreferencesBackupHelper(context, PREFS_DISPLAY);
        addHelper(MY_PREFS_BACKUP_KEY, helper);
    }

   public void storeData(){
        BackupManager backupManager = new BackupManager(context);
        backupManager.dataChanged();
    } 
}

How I store the data:

 ...
 SharedPreferences settings = getSharedPreferences("AppName", 0);
 SharedPreferences.Editor editor = settings.edit();
 editor.putBoolean("keyToStore", true);
 editor.commit();
 new MyBackupAgent(this).storeData();
 ...

How I receive the data:

 ...
 SharedPreferences settings = getSharedPreferences("AppName", 0);
 boolean value = settings.getBoolean("keyToStore", false);
 ...

I also added the API in the Android Manifest:

<application ...>
<meta-data android:name="com.google.android.backup.api_key" android:value="xxxxxxxxxxxxxxxxxxxxxxxxxx" />

Do you have any idea what I am doing wrong and how it works? Does it really work?


回答1:


Your backup agent class for SharedPreferences should be something like this:

public class MyPrefsBackupAgent extends BackupAgentHelper {
    // The name of the SharedPreferences file
    static final String PREFS = "user_preferences";

    // A key to uniquely identify the set of backup data
    static final String PREFS_BACKUP_KEY = "prefs";

    // Allocate a helper and add it to the backup agent
    @Override
    public void onCreate() {
        SharedPreferencesBackupHelper helper = new SharedPreferencesBackupHelper(this, PREFS);
        addHelper(PREFS_BACKUP_KEY, helper);
    }
}

Then, you must request a cloud backup (it will be done async) with something like:

import android.app.backup.BackupManager;
 ...

 public void requestBackup() {
   BackupManager bm = new BackupManager(this);
   bm.dataChanged();
 }

and you don't need to manually restore your SharedPreferences as they are automagically managed by the SharedPreferencesBackupHelper class.

Besides your backup API key, don't forget to add your backup agent class in your manifest:

<application android:label="MyApplication"
             android:backupAgent="MyBackupAgent">

More info about all this at http://developer.android.com/guide/topics/data/backup.html and http://developer.android.com/training/cloudsync/backupapi.html



来源:https://stackoverflow.com/questions/18578547/backup-sharedpreferences-in-android

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!