0

私はデータのバックアップを取って同じものを復元するクラスを持っています。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();
               }

        }
    }
}
4

2 に答える 2

0

完全なファイルを (SharedPreferences または内部ストレージから) バックアップする場合は、BackupAgentHelper を使用してバックアップ エージェントを構築する必要があります。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);
    }
}
于 2015-01-16T12:15:58.513 に答える
0

ドキュメントを見てください。拡張する場合BackupAgentHelperは、実際の作業を実行するためにonCreate1 つ以上のBackupHelper インスタンスを登録する必要があります。そうしないと、フレームワークがクラ​​スを無視し、onBackuporを呼び出さないと仮定していますonRestore

編集: a を実装してBackupHelperから、BackupAgentHelperonCreateメソッドでaddHelperを呼び出す必要があります。

于 2011-08-20T07:01:32.897 に答える