Sé que esto es posible, pero no estoy muy seguro de por dónde empezar. ¿Alguien ha sido capaz de lograr esto?Exportación de una base de datos SQLite a un archivo XML en Android
Gracias.
Sé que esto es posible, pero no estoy muy seguro de por dónde empezar. ¿Alguien ha sido capaz de lograr esto?Exportación de una base de datos SQLite a un archivo XML en Android
Gracias.
La clase DataXmlExporter
descrita en este artículo exportará un SQL lite DB a un archivo XML.
http://www.screaming-penguin.com/node/7749
El ejemplo completo está disponible en este repositorio SVN. La clase ManageData
invoca la exportación.
http://totsp.com/svn/repo/AndroidExamples/trunk/
Usted tendrá que crear una clase de aplicación que expone la base de datos y se hace referencia como el nombre de la aplicación en el archivo AndroidManifest.xml. A continuación, utilice ese DB como argumento para el constructor DataXmlExporter
.
Aquí está la clase de aplicación que uso. Usted ya debe tener una clase (probablemente no es nombrado DatabaseHelper
) que se extiende 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;
}
}
Tener un vistazo al código fuente aquí exporting-a-sqlite-database-to-an-xml-file-in-android
El único cambio que tenía que hacer (para detener algunas advertencias de Eclipse) fue cerrar un cursor en el método exportData(). Para que el código sea más portátil, también pasé el archivo XML y la ubicación como un argumento en lugar de como un campo final declarado.
El código escribe el archivo XML en la tarjeta SD. Ahora, @mmaitlen que enumeró el código fuente en su blog no agrega ninguna característica para probar la existencia de una unidad de almacenamiento externa. Así que eso te queda por hacer.
Sin embargo, puede incrustar un código simple de probar la existencia de una tarjeta de memoria se puede escribir con el siguiente fragmento (no probado):
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
}
Las pruebas para el almacenamiento externo es útil si tiene archivos de gran tamaño a crear que puede exceder la capacidad interna.
esto es lo que quiero ... excelente enlace ... gracias amigo – Thiru
Me pareció muy útil:
http://www.phonesdevelopers.com/1788273/
Su uso de la siguiente manera para exportar a la tarjeta SD:
File sd = Environment.getExternalStorageDirectory();
String path = sd + "/" + DB_NAME + ".xml";
DatabaseDump databaseDump = new DatabaseDump(mySQLiteOpenHelperObject.getReadableDatabase(), path);
databaseDump.exportData();
Por supuesto, no se olvide:
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
¿Cómo se puede llamar a esta clase? – jcrowson
Gracias por los detalles adicionales de Wayne. Tengo otra pregunta: si quisiera exportar la base de datos cuando un usuario presiona un botón, por ejemplo, "Enviar base de datos", ¿asignaría el botón para iniciar un intento para la clase MyApplication o la clase XMLExport ?. – jcrowson
Ese ejemplo de Android vinculado anteriormente hace exactamente lo que quiere. Debería poder agregar ese código a su aplicación, cambiar un poco los nombres de los archivos, agregar el intento al manifiesto y estar listo para comenzar. Tiene un botón de copia de seguridad de DB y un botón de exportación a XML en la actividad. –