2011-09-11 13 views
5

से डेटाबेस को पुनर्स्थापित करें, मैं वर्तमान में अपने एंड्रॉइड एप्लिकेशन में बैकअप सुविधा बनाने की तलाश में हूं। हालांकि मैं इसे लागू करने से पहले भी संघर्ष कर रहा हूं क्योंकि मुझे यकीन नहीं है कि जाने का सही तरीका क्या है।एंड्रॉइड बैकअप और एसडी-कार्ड

मैं नेट पर कुछ दिलचस्प लेख नहीं मिले और इसलिए मैं तीन संभावित हल के साथ आया था:

  1. बैकअप एसडी कार्ड
  2. निर्यात पर किसी XML फ़ाइल में डीबी डेटा के लिए पूरे डीबी फ़ाइल एसडी कार्ड
  3. उपयोग बैकअप के लिए एंड्रॉयड बैकअप तंत्र गूगल के पूरे डीबी बादल

अब मैं सोच रहा था तुम लोग इन 3 समाधान के बारे में क्या सोचते हैं, या आप एक और (एम जानते हो अब भी जाने का एक बेहतर तरीका है) और आपकी आंखों में क्या चलने का सबसे अच्छा तरीका है?

यहाँ संभव कार्यान्वयन पर मेरी टिप्पणी कर रहे हैं:

  1. मैं अगर फोन निहित नहीं है कि यह डीबी फ़ाइल पुनर्स्थापित करना संभव है पता नहीं है ... नहीं तो वहाँ वास्तव में किसी भी नीचे नहीं हैं इस के लिए मुझे लगता है कि पक्षों ...
  2. Android फोन पर फ्लाई पर एक्सएमएल फाइल हैंडलिंग भारी है इसलिए यदि यह यह है कि
  3. तरह यह करने के लिए नहीं Android बैकअप तंत्र बैकअप सुविधा का उपयोग करना सबसे अच्छा है बचा जा सकता है ही उपलब्ध है अगर यह फोन पर उपयोगकर्ता द्वारा सक्षम है, और सभी डेटा क्लाउड में कॉपी किया जाना चाहिए ... जो मेरे मामले में कुछ मामलों में हो सकता है बहुत ...

मैं इस मुद्दे पर कुछ इनपुट देखने के लिए उत्सुक हूं!

अग्रिम धन्यवाद!

Kr,

डिर्क

उत्तर

0

मैं हमेशा उपयोग करता हूं 1.)। यहां मेरी एक कक्षा है जो एसडी कार्ड के लिए डीबी का बैकअप करता है। मैं अपाचे कॉमन्स-आईओ से फ़ाइलउटिल का उपयोग कर रहा हूं, अगर आप उस जार का उपयोग नहीं करते हैं तो आपको इसे बदलने की जरूरत है। इसके अतिरिक्त आपके SQLiteOpenHelper क्लास में एक विधि की आवश्यकता है (यहां MySQLiteOpenHelper.getDatabaseName()) जो आपकी डेटाबेस फ़ाइल का नाम देता है।

आप अपने गतिविधियों में से एक में एक AsyncTask के भीतर से है कि कॉल करेंगे ...

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(); 
    } 
} 
+0

उदाहरण मेरे शोध के दौरान मिले लोगों के समान है। मैं शायद इस तरह से होगा। सहायता के लिए धन्यवाद! – dirkvranckaert

+0

यह डेटाबेस को पुनर्स्थापित करने का उल्लेख नहीं करता है। –

+0

@ हाराल्ड, मैं आपका जवाब समझता हूं। इसे विकसित करने के लिए इसके सहायक। लेकिन क्या आप अपना सुझाव साझा कर सकते हैं जब हमें डीबी को दूसरी निर्देशिका में स्थानांतरित करना है जैसे अनइंस्टॉल टाइम इंस्टाल टाइम इत्यादि? आपकी सकारात्मक प्रतिक्रिया के लिए इंतजार कर रहा है –

0

आप एसडी कार्ड पर एक फ़ाइल से डेटाबेस पुनर्स्थापित करने के लिए एक निहित फोन की आवश्यकता नहीं है। प्रत्येक एप्लिकेशन अपनी निजी निर्देशिकाओं को लिख सकता है, ताकि आप फ़ाइल को कॉपी कर सकें। 2 के लिए, क्या आपके पास कोई ठोस संख्या है? एक्सएमएल को संभालना काफी तेज़ है, और चूंकि यह बैकअप/पुनर्स्थापित है, यह अक्सर नहीं होता है और उपयोगकर्ता उम्मीद करेंगे कि इसमें कुछ समय लगेगा, इसलिए यह कोई समस्या नहीं होनी चाहिए। सामान्य रूप से, आपके द्वारा किए गए वास्तविक समय को मापें और विचार करें कि आपके पास कोई निर्णय लेने से पहले कितना डेटा है।

+0

ठीक है लेकिन अगर 1) संभव है तो क्यों एक भी समय सभी तालिकाओं बैकअप के लिए कुछ सामान्य सामान बनाने पर खर्च करना चाहिए और उनका डेटा और न सिर्फ पूरे डेटाबेस की प्रतिलिपि बनाएँ? क्या इसका कोई ज्ञात नुकसान है? – dirkvranckaert

+0

यह निर्भर करता है, अगर आपको इसकी आवश्यकता नहीं है, तो इसे मत लिखें। शायद आपको अन्य कार्यक्रमों में अपना डेटा आयात करने की आवश्यकता है, और एक्सएमएल/सीएसवी/जेएसओएन बेहतर विकल्प हो सकता है। यह काफी संभावना नहीं है, लेकिन एंड्रॉइड 5.0 में SQLite संस्करण वर्तमान प्रारूप, आदि के साथ असंगत हो सकता है। –

संबंधित मुद्दे