2010-04-06 15 views

risposta

4

La classe DataXmlExporter descritta in questo articolo esporterà un DB lite SQL in un file XML.

http://www.screaming-penguin.com/node/7749

L'esempio completo è disponibile in questo repo SVN. La classe ManageData richiama l'esportazione.

http://totsp.com/svn/repo/AndroidExamples/trunk/

Sarà necessario creare una classe di applicazione che espone il DB e fatto riferimento come il nome dell'applicazione nel file AndroidManifest.xml. Quindi utilizzare tale DB come argomento per il costruttore DataXmlExporter.

Ecco la classe di applicazione che uso. Si dovrebbe già avere una classe (probabilmente non di nome DatabaseHelper), che si estende SQLiteOpenHelper

package com.billybobbain.android.someapp; 
import android.app.Application; 
import android.util.Log; 

public class MyApplication extends Application { 

    public static final String APP_NAME = "SomeApp"; 

    private DatabaseHelper dataHelper; 

    @Override 
    public void onCreate() { 
     super.onCreate(); 
     Log.d(APP_NAME, "APPLICATION onCreate"); 
     this.dataHelper = new DatabaseHelper(this);  
    } 

    @Override 
    public void onTerminate() { 
     Log.d(APP_NAME, "APPLICATION onTerminate");  
     super.onTerminate();  
    } 

    public DatabaseHelper getDataHelper() { 
     return this.dataHelper; 
    } 

    public void setDataHelper(DatabaseHelper dataHelper) { 
     this.dataHelper = dataHelper; 
    } 
} 
+0

Come si fa a chiamare questa classe? – jcrowson

+0

Grazie per il dettaglio aggiunto Wayne. Ho un'altra domanda, se volessi esportare il database quando un utente preme un pulsante, ad esempio "Invia database", dovrei mappare il pulsante per avviare un intento per la classe MyApplication o la classe XMLExport ?. – jcrowson

+0

Questo esempio Android collegato sopra fa esattamente quello che vuoi. Dovresti essere in grado di aggiungere quel codice alla tua applicazione, cambiare un po 'il nome del file, aggiungere l'intento al manifest ed essere pronto per partire. Ha un pulsante DB di backup e un pulsante di esportazione in XML sull'attività. –

2

Date un'occhiata al codice sorgente qui exporting-a-sqlite-database-to-an-xml-file-in-android

L'unico cambiamento che ho dovuto fare (per fermare un paio di avvertimenti Eclipse) era quello di chiudere un cursore nel metodo exportData(). Per rendere il codice più portabile, ho anche passato il file XML e la posizione come argomento piuttosto che come un campo finale dichiarato.

Il codice scrive il file XML sulla scheda SD. Ora, @mmaitlen che ha elencato il codice sorgente sul suo blog non aggiunge alcuna funzionalità per verificare l'esistenza di un'unità di archiviazione esterna. Quindi ti resta da fare.

Tuttavia, è possibile incorporare un codice semplice per verificare l'esistenza di una scheda di memoria scrivibile con il seguente frammento (non testata):

sdOkToWrite = false; 
    String sdTest = Environment.getExternalStorageState(); 
    if (sdTest.equals(Environment.MEDIA_MOUNTED)) { 
     sdOkToWrite = true; 
    } else { 
    // Here's where you can code what to do without the external storage 
    } 

Test per l'archiviazione esterna è utile se si dispone di file di grandi dimensioni a creare che può superare la capacità interna.

+0

questo è quello che voglio ... ottimo collegamento .. grazie amico – Thiru

1

Ho trovato questo molto utile:

http://www.phonesdevelopers.com/1788273/

Usandolo come segue per esportare alla scheda SD:

File sd = Environment.getExternalStorageDirectory(); 
String path = sd + "/" + DB_NAME + ".xml"; 

DatabaseDump databaseDump = new DatabaseDump(mySQLiteOpenHelperObject.getReadableDatabase(), path); 
databaseDump.exportData(); 

Naturalmente non dimenticate:

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/> 
Problemi correlati