невозможно вызвать метод onBackup () BackupAgentHelper - PullRequest
0 голосов
/ 19 августа 2011

У меня есть класс, который принимает резервное копирование данных и восстановить то же самое. Я привел пример, приведенный в демоверсиях API. Но это не работает вообще.

Кто-нибудь может мне помочь по этому вопросу?

Android Manifest.xml

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
      package="com.kpbird.backupdemo"
      android:versionCode="1"
      android:versionName="1.0">


    <application android:icon="@drawable/icon" android:label="@string/app_name" android:backupAgent="MyBackupAgent" android:restoreAnyVersion="true" android:allowBackup="true" android:enabled="true">
        <activity android:name=".BackupServiceDemo"
                  android:label="@string/app_name">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
        <meta-data android:name="com.google.android.backup.api_key" android:value="AEdPqrEAAAAIAjALiYV5vv5cRGD5L649XByQMnFFYfApskNIfg" />

    </application>
</manifest>

MyActivity.class

public class BackupRestoreActivity extends Activity implements OnClickListener {

 BackupManager mBackupManager;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        mBackupManager = new BackupManager(this);
        mBackupManager.dataChanged();

}
}

MyBackupAgent.class

public class MyBackupAgent extends BackupAgentHelper {


    static final String MY_PREFS_BACKUP_KEY = "AEdPqrEAAAAIAjALiYV5vv5cRGD5L649XByQMnFFYfApskNIfg";
    static final String APP_DATA_KEY = "mydata";
    String TAG = this.getClass().getSimpleName();
    @Override
    public void onCreate() {

    Log.i("MyBackupAgent >>>>>> ","into Oncreate() of my Backup Agent >>>>");


    }

    @Override
    public void onBackup(ParcelFileDescriptor oldState, BackupDataOutput data,ParcelFileDescriptor newState) throws IOException {

            Log.i(TAG, "I m onBackup");
          ByteArrayOutputStream bufStream = new ByteArrayOutputStream();
          DataOutputStream outWriter = new DataOutputStream(bufStream);
          outWriter.writeUTF("Hello Backup Service!");

          byte[] buffer = bufStream.toByteArray();
          int len = buffer.length;
          data.writeEntityHeader(APP_DATA_KEY, len);
          data.writeEntityData(buffer, len);

          FileOutputStream outstream = new FileOutputStream(newState.getFileDescriptor());
          DataOutputStream out = new DataOutputStream(outstream);
          out.writeUTF("Hello Backup Service!");
          Log.i(TAG, "Backup Message Completed");

    }

    @Override
    public void onRestore(BackupDataInput data, int appVersionCode,ParcelFileDescriptor newState) throws IOException {
        Log.i(TAG, "I m onRestore");
        while (data.readNextHeader()) {
               String key = data.getKey();
               int dataSize = data.getDataSize();
               if(key.equals(APP_DATA_KEY)){
                   byte[] dataBuf = new byte[dataSize];
                    data.readEntityData(dataBuf, 0, dataSize);
                    ByteArrayInputStream baStream = new ByteArrayInputStream(dataBuf);
                    DataInputStream in = new DataInputStream(baStream);
                    String read = in.readUTF();
                    Log.i(TAG, "Restored Message :" + read);
               }
               else{
                   data.skipEntityData();
               }

        }
    }
}

Ответы [ 2 ]

0 голосов
/ 16 января 2015

Вам следует создать агент резервного копирования с помощью BackupAgentHelper, если вы хотите создать резервную копию полных файлов (из SharedPreferences или из внутреннего хранилища). Для каждого помощника, которого вы хотите добавить в свой BackupAgentHelper, вы должны сделать следующее при использовании метода onCreate ():

  1. Создать экземпляр нужного класса помощника. В конструкторе класса вы должны указать соответствующие файлы, которые вы хотите сделать резервную копию.
  2. Вызовите addHelper (), чтобы добавить помощника в ваш BackupAgentHelper.

Пример:

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);
    }
}
0 голосов
/ 20 августа 2011

Посмотрите на документы : если вы расширяете BackupAgentHelper, то в onCreate вам необходимо зарегистрировать один или несколько BackupHelper экземпляров для выполнения фактической работы.Если вы этого не сделаете, я предполагаю, что фреймворк будет игнорировать ваш класс и просто не будет вызывать onBackup или onRestore.

РЕДАКТИРОВАТЬ: вам нужно реализовать BackupHelper и затем в вашем BackupAgentHelper * onCreate метод, который вам нужно вызвать addHelper .

...