0

これを検索しましたが、回答が得られませんでした。 私はBudgetアプリを開発しており、2種類のデータベース(SqliteとShared-preferences)があります。私はsdcardのsqliteデータベースのバックアップ/復元ができますが、私はどのように共有環境設定データベースをバックアップして復元するのか分かりません。sdカードにバックアップを作成した後、Android SharedPreferencesをXMLファイルから復元するにはどうすればよいですか?

共有設定データベースをバックアップできますが、SDカードから復元する方法はわかりません。
データベース名: 1.magicbox_database.dbはsqliteのデータベースでは、 2.magicbox_database_sf.dbこれは、両方のデータベースのバックアップのためのコードであるsharedpreferencesデータベース

です。

if (isStoragePermissionGranted() == true) { 
        try { 
         File sd = Environment.getExternalStorageDirectory(); 
         if (sd.canWrite()) { 
          String currentDBPath = "/data/data/" + getPackageName() + "/databases/OLBE_DEMO"; 
          String backupDBPath = "magicbox_database.db"; 
          File currentDB = new File(currentDBPath); 
          File backupDB = new File(sd, backupDBPath); 
          Toast.makeText(MainActivity.this, "backup creating....", Toast.LENGTH_SHORT).show(); 
          if (currentDB.exists()) { 
           FileChannel src = new FileInputStream(currentDB).getChannel(); 
           FileChannel dst = new FileOutputStream(backupDB).getChannel(); 
           dst.transferFrom(src, 0, src.size()); 
           src.close(); 
           dst.close(); 
           Toast.makeText(MainActivity.this, "Bckup Created !", Toast.LENGTH_SHORT).show(); 
           Toast.makeText(MainActivity.this, "magicbox_database.db in External Storage", Toast.LENGTH_SHORT).show(); 
          } 


          String currentDBPath1 = "/data/data/" + getPackageName() + "/shared_prefs/DATABASE.xml"; 
          String backupDBPath1 = "magicbox_database_sf.xml"; 
          File currentDB1 = new File(currentDBPath1); 
          File backupDB1 = new File(sd, backupDBPath1); 
          // Toast.makeText(MainActivity.this, "backup creating....", Toast.LENGTH_SHORT).show(); 
          if (currentDB1.exists()) { 
           FileChannel src1 = new FileInputStream(currentDB1).getChannel(); 
           FileChannel dst1 = new FileOutputStream(backupDB1).getChannel(); 
           dst1.transferFrom(src1, 0, src1.size()); 
           src1.close(); 
           dst1.close(); 
           //Toast.makeText(MainActivity.this, "Bckup Created !", Toast.LENGTH_SHORT).show(); 
           Toast.makeText(MainActivity.this, "magicbox_database_sf.db in External Storage", Toast.LENGTH_SHORT).show(); 
          } 

         } 
        } catch (Exception e) { 
         Toast.makeText(MainActivity.this, "ERROR! backup not created", Toast.LENGTH_SHORT).show(); 
        } 
       } 

両方

if (isStoragePermissionGranted() == true) { 
        try { 
         File sd = Environment.getExternalStorageDirectory(); 
         if (sd.canWrite()) { 
          String currentDBPath = "/data/data/" + getPackageName() + "/databases/OLBE_DEMO"; 
          String backupDBPath = "magicbox_database.db"; 
          File currentDB = new File(currentDBPath); 
          File backupDB = new File(sd, backupDBPath); 
          Toast.makeText(MainActivity.this, "restoring......", Toast.LENGTH_SHORT).show(); 
          if (currentDB.exists()) { 
           FileChannel src = new FileInputStream(backupDB).getChannel(); 
           FileChannel dst = new FileOutputStream(currentDB).getChannel(); 
           dst.transferFrom(src, 0, src.size()); 
           src.close(); 
           dst.close(); 
           Toast.makeText(MainActivity.this, "Your data Restored !", Toast.LENGTH_SHORT).show(); 
          } 
          String currentDBPath1 = "/data/data/" + getPackageName() + "/shared_prefs/DATABASE.xml"; 
          String backupDBPath1 = "magicbox_database_sf.xml"; 
          File currentDB1 = new File(currentDBPath1); 
          File backupDB1 = new File(sd, backupDBPath1); 
          if (currentDB1.exists()) { 
           FileChannel src1 = new FileInputStream(backupDB1).getChannel(); 
           FileChannel dst1 = new FileOutputStream(currentDB1).getChannel(); 
           dst1.transferFrom(src1, 0, src1.size()); 
           src1.close(); 
           dst1.close(); 
           Toast.makeText(MainActivity.this, "magicbox_database_sf.db in External Storage", Toast.LENGTH_SHORT).show(); 
          } 
         } 

        } catch (Exception e) { 
         Toast.makeText(MainActivity.this, "ERROR! data not restored", Toast.LENGTH_SHORT).show(); 
        } 
       } 

変更は、このコード

FileChannel src1 = new FileInputStream(backupDB1).getChannel(); 
FileChannel dst1 = new FileOutputStream(currentDB1).getChannel(); 
+0

magicbox_database_sf.dbはsharedpreferencesデータベースです - これは何ですか? ean? – shadygoneinsane

+0

共有プレフィックスはキー値のペアです! – shadygoneinsane

+1

@shadygoneinsane magic_database_sf.dbはSDCARD –

答えて

1

にそうちょうどパスとXMLファイルを簡単にすべてのあなたで抽出することができます取得するthisを踏襲しているため、復元にこのコードpreferences - このxmlコンテンツを使用して(解析することによって)、プリファレンスを作成したり値を抽出したりすることができます

XMLは次のようなものになります。XML解析のために

<?xml version='1.0' encoding='utf-8' standalone='yes' ?> 
<map> 
    <int name="Key2" value="100" /> 
    <long name="Key1" value="99" /> 
    <string name="Key">Vikesh Dass</string> 
</map> 

ただ、これは簡単なはず、あなたのデータを取得するためにXMLを解析:)

を、あなたは、このクラスを使用することができます。

public class XMLParser { 

private static final String ns = null; 

public void parse(InputStream in) throws XmlPullParserException, IOException { 
    try { 
     XmlPullParser parser = Xml.newPullParser(); 
     parser.setFeature(XmlPullParser.FEATURE_PROCESS_NAMESPACES, false); 
     parser.setInput(in, null); 
     parser.nextTag(); 
     readPreferences(parser); 
    } finally { 
     in.close(); 
    } 
} 

private void readPreferences(XmlPullParser parser) throws XmlPullParserException, IOException { 
    parser.require(XmlPullParser.START_TAG, ns, "map"); 
    while (parser.next() != XmlPullParser.END_TAG) { 
     if (parser.getEventType() != XmlPullParser.START_TAG) { 
      continue; 
     } 
     String node = parser.getName(); 
     if (node.equals("string")) { 
      readName(parser); 
     } else if (node.equals("int")) { 
      readValueint(parser); 
     } else if (node.equals("long")) { 
      readValuelong(parser); 
     } else { 
      skip(parser); 
     } 
    } 
} 

private void readName(XmlPullParser parser) throws IOException, XmlPullParserException { 
    parser.require(XmlPullParser.START_TAG, ns, "string"); 
    String name = readText(parser); 
    parser.require(XmlPullParser.END_TAG, ns, "string"); 
    //Set the Preference again after it is fetched 
} 

private String readText(XmlPullParser parser) throws IOException, XmlPullParserException { 
    String result = ""; 
    if (parser.next() == XmlPullParser.TEXT) { 
     result = parser.getText(); 
     parser.nextTag(); 
    } 
    return result; 
} 

private void readValueint(XmlPullParser parser) throws IOException, XmlPullParserException { 
    parser.require(XmlPullParser.START_TAG, ns, "int"); 
    String ValueData = parser.getAttributeValue(null, "value"); 
    String ValueKey = parser.getAttributeValue(null, "name"); 
    //Set the Preference again after it is fetched 
} 

private void readValuelong(XmlPullParser parser) throws IOException, XmlPullParserException { 
    parser.require(XmlPullParser.START_TAG, ns, "long"); 
    String ValueData = parser.getAttributeValue(null, "value"); 
    String ValueKey = parser.getAttributeValue(null, "name"); 
    //Set the Preference again after it is fetched 
} 

private void skip(XmlPullParser parser) throws XmlPullParserException, IOException { 
    if (parser.getEventType() != XmlPullParser.START_TAG) { 
     throw new IllegalStateException(); 
    } 
    int depth = 1; 
    while (depth != 0) { 
     switch (parser.next()) { 
      case XmlPullParser.END_TAG: 
       depth--; 
       break; 
      case XmlPullParser.START_TAG: 
       depth++; 
       break; 
     } 
    } 
} 

} 

あなたのクラスからこれを呼び出します:

File sd = Environment.getExternalStorageDirectory(); 
     String backupDBPath1 = "your_backedUpPrefDb.xml"; 
     File backupDB1 = new File(sd, backupDBPath1); 
     InputStream is = new BufferedInputStream(new FileInputStream(backupDB1)); 
     XMLParser myXMLParser = new XMLParser(); 
     myXMLParser.parse(is); 
     is.close(); 
+1

私はshareprefrencesデータベースをバックアップすることができ、私はmagicbox_database_sf.xmlファイルを取得していますが、今は復元したいと思います。どうすれば復元できますか? –

+0

これらのプリファレンスをもう一度作成したいと思っていましたか? – shadygoneinsane

+1

ねえ。私はsharedprefrenceデータベースがあるとそこにいくつかの値があるアプリを持っている今私は私のアプリケーションをアンインストールし、データが削除されますので、私はalredyを持っているデータベースのバックアップが必要です。今私はそのsharedprefrenceデータベースを復元する必要があります。 –

関連する問題