2011-09-11 27 views
5

Şu anda Android uygulamamda bir yedekleme özelliği oluşturmak istiyorum. Ancak bunu uygulamaya başlamadan önce biraz zorlanıyorum çünkü gitmek için doğru yolun ne olduğundan emin değilim. Android yedekleme ve SD karttan veritabanına geri yükleme ve geri yükleme

Ben net bazı ilginç makaleler bulundu ve bu yüzden üç olası çözümleri ile geldi:

  1. Yedekleme SD kart üzerinde bir XML dosyasına DB-veri
  2. İhracat için tüm DB dosyası Google'a tüm DB

bulut SD kart

  • Kullanım yedekleme Android yedekleme mekanizması Şimdi siz bu 3 çözümler hakkında mı, yoksa başka (m biliyoruz merak ediyorum aybe gitmenin daha iyi bir yolu) ve gözlerinde neler var en iyi yolu? İşte

    olası uygulamaları üzerinde benim açıklamalar aşağıda sunulmuştur:

    1. telefon o DB dosyayı geri mümkün olduğunu köklü değilse ben Aksi gerçekten herhangi orada değildir ... bilmiyorum buna Android yedekleme mekanizmasını yedekleme özelliğini kullanarak o
    2. gibi yapmak en iyisidir önlenebilir eğer öyleyse Android telefonlarda anında XML dosyalarını işleme
    3. ağırdır bence bunun için iki tarafın ... yalnızca Telefondaki kullanıcı tarafından etkinleştirildiyse ve tüm veriler buluta kopyalanmalıdır ... Benim durumumda bazı durumlarda oldukça iyi olabilir. lot ...

    Bu konuyla ilgili bazı girdiler görmeyi sabırsızlıkla bekliyorum!

    Şimdiden teşekkürler!

    Kr,

    Dirk

  • cevap

    0

    Her zaman kullanıyorum 1.). İşte bir DB-SD kartını yedekleyen bir sınıfım. FileUtils'i burada Apache commons-io'dan kullanıyorum, eğer bu jar'ı kullanmazsanız onu değiştirmeniz gerekir. Ayrıca, SQLiteOpenHelper sınıfınızda (burada MySQLiteOpenHelper.getDatabaseName()) veritabanı dosyanızın adını döndüren bir yönteme ihtiyaç vardır. Etkinliklerinizden birinde AsyncTask içinden böyle hitap edecek

    ...

    public class MyDatabaseTools { 
        private String appName = ""; 
        private String packageName = ""; 
    
        public boolean backup() { 
        boolean rc = false; 
    
        boolean writeable = isSDCardWriteable(); 
        if (writeable) { 
         File file = new File(Environment.getDataDirectory() + "/data/" + packageName + "/databases/" + MySQLiteOpenHelper.getDatabaseName()); 
    
         File fileBackupDir = new File(Environment.getExternalStorageDirectory(), appName + "/backup"); 
         if (!fileBackupDir.exists()) { 
         fileBackupDir.mkdirs(); 
         } 
    
         if (file.exists()) { 
         File fileBackup = new File(fileBackupDir, MySQLiteOpenHelper.getDatabaseName()); 
         try { 
          fileBackup.createNewFile(); 
          FileUtils.copyFile(file, fileBackup); 
          rc = true; 
         } catch (IOException ioException) { 
          // 
         } catch (Exception exception) { 
          // 
         } 
         } 
        } 
    
        return rc; 
        } 
    
        private boolean isSDCardWriteable() { 
        boolean rc = false; 
    
        String state = Environment.getExternalStorageState(); 
        if (Environment.MEDIA_MOUNTED.equals(state)) { 
         rc = true; 
        } 
    
        return rc; 
        } 
    
        public MyDatabaseTools(final Context context, final String appName) { 
         this.appName = appName; 
         packageName = context.getPackageName(); 
        } 
    } 
    
    Tamam
    +0

    Örnek, araştırmam sırasında bulduğumlara benzer. Muhtemelen bu şekilde olacak. Yardım için teşekkürler! – dirkvranckaert

    +0

    Bu, veritabanının geri yüklenmesinden bahsetmiyor. –

    +0

    @Harald, cevabınızı anlıyorum. onun geliştirilmesi için onun yardımcısı. Ancak db'yi kaldırma zamanı yükleme zamanı gibi başka bir dizine taşımak zorunda olduğumuz zamanki önerilerinizi paylaşır mısınız? olumlu geri bildiriminizi bekliyorum –

    0

    Sen SD kart üzerinde bir dosyadan veritabanını geri yüklemek için bir köklü telefon olması gerekmez. Her uygulama kendi özel dizinlerine yazabilir, böylece dosyayı kopyalayabilirsiniz. 2'ye gelince, herhangi bir somut numaran var mı? XML işlemek oldukça hızlıdır ve yedekleme/geri yükleme olduğundan çok sık gerçekleşmez ve kullanıcılar bunun biraz zaman almasını bekler, bu yüzden bir sorun olmamalıdır. Her zaman olduğu gibi, herhangi bir karar vermeden önce, gerçek zamanı ölçün ve ne kadar veri olduğunu göz önünde bulundurun.

    +0

    ancak 1 ise) mümkündür o zaman neden kimse bile yedekleme için tüm tabloları bazı jenerik şeyler oluşturmaya vakit olmalı ve Onların verileri ve sadece tüm veritabanını kopyalamak değil mi? Bilinen dezavantajları var mı? – dirkvranckaert

    +0

    İhtiyacınız yoksa buna gerek yok. Belki de verilerinizi diğer programlara aktarmanız gerekir ve XML/CSV/JSON daha iyi bir seçim olabilir. Oldukça olası değil, ancak Android 5.0'daki SQLite sürümü geçerli biçim ile uyumlu olmayabilir. –

    İlgili konular