Welcome to ShenZhenJia Knowledge Sharing Community for programmer and developer-Open, Learning and Share
menu search
person
Welcome To Ask or Share your Answers For Others

Categories

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?

See Question&Answers more detail:os

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
thumb_up_alt 0 like thumb_down_alt 0 dislike
298 views
Welcome To Ask or Share your Answers For Others

1 Answer

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


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
thumb_up_alt 0 like thumb_down_alt 0 dislike
Welcome to ShenZhenJia Knowledge Sharing Community for programmer and developer-Open, Learning and Share
...