Note that there are some explanatory texts on larger screens.

plurals
  1. POExporting SQLite Table data as XML
    primarykey
    data
    text
    <p>I am getting a Null pointer Exception while trying to export my SQLite database's table into an XML file.</p> <p><strong>StackTrace:</strong> PasteBin <a href="http://pastebin.com/cZu5gg2B" rel="nofollow noreferrer">Link</a></p> <p>--<br><strong>Update 2:</strong> I just don't get it of what is passed in(at time of initializing and calling the exportData Method in Main Activity): <code>DatabaseAssistant DA = new DatabaseAssistant(myContext, **WHAT_IS_PASSED_HERE?**); DA.exportData();</code><br>--<br> <strong>Update:</strong> Lines mentioned where I get NPE are: at <code>com.astix.reachout.DatabaseAssistant.exportData(DatabaseAssistant.java:72</code> &amp; <code>com.astix.reachout.ReachOutMain$9.onClick(ReachOutMain.java:347)</code> </p> <p>Which are <code>_exporter.startDbExport( _db.getPath() );</code> available inside <code>DA.exportData()</code><br> --<br> I referred to <a href="https://stackoverflow.com/a/2593752/1184579">this answer</a>. My Database Assistant code:</p> <pre><code>public class DatabaseAssistant { public String filNameFullPath; public long filNameTS; public String EXPORT_FILE_NAME; //private static final String EXPORT_FILE_NAME = "/sdcard/datanaexport.xml"; private Context _ctx; private SQLiteDatabase _db; private Exporter _exporter; public String newfilename(){ System.out.println("inside newfilename()"); filNameTS = System.currentTimeMillis(); filNameFullPath = Environment.getExternalStorageDirectory().getPath(); EXPORT_FILE_NAME = filNameFullPath + "/" + filNameTS +".xml"; System.out.println("new file name: " + EXPORT_FILE_NAME); return EXPORT_FILE_NAME; } public DatabaseAssistant( Context ctx, SQLiteDatabase db ) { _ctx = ctx; _db = db; newfilename(); try { System.out.println("inside try databaseAssitant() -- file name: " + EXPORT_FILE_NAME); // create a file on the sdcard to export the // database contents to File myFile = new File( EXPORT_FILE_NAME ); myFile.createNewFile(); FileOutputStream fOut = new FileOutputStream(myFile); BufferedOutputStream bos = new BufferedOutputStream( fOut ); _exporter = new Exporter( bos ); } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } } public void exportData( ) { log( "Exporting Data" ); try { System.out.println("inside try exportData()"); _exporter.startDbExport( _db.getPath() ); // get the tables out of the given sqlite database String sql = "SELECT * FROM sqlite_master"; Cursor cur = _db.rawQuery( sql, new String[0] ); Log.d("db", "show tables, cur size " + cur.getCount() ); cur.moveToFirst(); String tableName; while ( cur.getPosition() &lt; cur.getCount() ) { tableName = cur.getString( cur.getColumnIndex( "name" ) ); log( "table name " + tableName ); // don't process these two tables since they are used // for metadata if ( ! tableName.equals( "android_metadata" ) &amp;&amp; ! tableName.equals( "sqlite_sequence" ) ) { exportTable( tableName ); } cur.moveToNext(); } _exporter.endDbExport(); _exporter.close(); } catch (IOException e) { e.printStackTrace(); } } private void exportTable( String tableName ) throws IOException { _exporter.startTable(tableName); // get everything from the table String sql = "select * from " + tableName; Cursor cur = _db.rawQuery( sql, new String[0] ); int numcols = cur.getColumnCount(); log( "Start exporting table " + tableName ); // // logging // for( int idx = 0; idx &lt; numcols; idx++ ) // { // log( "column " + cur.getColumnName(idx) ); // } cur.moveToFirst(); // move through the table, creating rows // and adding each column with name and value // to the row while( cur.getPosition() &lt; cur.getCount() ) { _exporter.startRow(); String name; String val; for( int idx = 0; idx &lt; numcols; idx++ ) { name = cur.getColumnName(idx); val = cur.getString( idx ); log( "col '" + name + "' -- val '" + val + "'" ); _exporter.addColumn( name, val ); } _exporter.endRow(); cur.moveToNext(); } cur.close(); _exporter.endTable(); } private void log( String msg ) { Log.d( "DatabaseAssistant", msg ); } class Exporter { private static final String CLOSING_WITH_TICK = "'&gt;"; private static final String START_DB = "&lt;export-database name='"; private static final String END_DB = "&lt;/export-database&gt;"; private static final String START_TABLE = "&lt;table name='"; private static final String END_TABLE = "&lt;/table&gt;"; private static final String START_ROW = "&lt;row&gt;"; private static final String END_ROW = "&lt;/row&gt;"; private static final String START_COL = "&lt;col name='"; private static final String END_COL = "&lt;/col&gt;"; private BufferedOutputStream _bos; public Exporter() throws FileNotFoundException { this( new BufferedOutputStream( _ctx.openFileOutput( EXPORT_FILE_NAME, Context.MODE_WORLD_READABLE ) ) ); } public Exporter( BufferedOutputStream bos ) { _bos = bos; } public void close() throws IOException { if ( _bos != null ) { _bos.close(); } } public void startDbExport( String dbName ) throws IOException { String stg = START_DB + dbName + CLOSING_WITH_TICK; _bos.write( stg.getBytes() ); } public void endDbExport() throws IOException { _bos.write( END_DB.getBytes() ); } public void startTable( String tableName ) throws IOException { String stg = START_TABLE + tableName + CLOSING_WITH_TICK; _bos.write( stg.getBytes() ); } public void endTable() throws IOException { _bos.write( END_TABLE.getBytes() ); } public void startRow() throws IOException { _bos.write( START_ROW.getBytes() ); } public void endRow() throws IOException { _bos.write( END_ROW.getBytes() ); } public void addColumn( String name, String val ) throws IOException { String stg = START_COL + name + CLOSING_WITH_TICK + val + END_COL; _bos.write( stg.getBytes() ); } } class Importer { } } </code></pre> <p>And in my main activity(called under onClick of a button):</p> <pre><code>DatabaseAssistant DA = new DatabaseAssistant(myContext, mySQLiteDatabase); DA.exportData(); </code></pre> <p>Here ^ (above is declared as):</p> <pre><code>private Context myContext; private SQLiteDatabase mySQLiteDatabase; </code></pre> <p>Any suggestion is appreciable.. Thanks</p>
    singulars
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    plurals
    1. This table or related slice is empty.
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload