2012-11-25 51 views
0

我想将应用程序的SQLite数据库导出为CSV文件并存储在SD卡中。导出方法在DBAdapter类中定义为ExportToCSV。我检查应用程序是否成功创建SQLite数据库。但是,当我尝试使用MainActivity中的onPause方法调用ExportToCSV时,应用程序无法响应导出数据库。你能给我一些关于如何改正这段代码的意见吗?我会感谢您的帮助!评论需要将android Sqlite数据库导出为CSV

我的代码如下:

public void ExportToCSV(Cursor c, String fileName) {  
     int rowCount = 0; 
     int colCount = 0; 
     FileWriter fw; 
     BufferedWriter bfw; 
     File sdCardDir = Environment.getExternalStorageDirectory(); 
     File saveFile = new File(sdCardDir, fileName); 
     try { 
      rowCount = c.getCount(); 
      colCount = c.getColumnCount(); 
      fw = new FileWriter(saveFile); 
      bfw = new BufferedWriter(fw); 
      if (rowCount > 0) { 
       c.moveToFirst(); 
       // write the colume title 
       for (int i = 0; i < colCount; i++) { 
        if (i != colCount - 1) 
         bfw.write(c.getColumnName(i) + ','); 
        else 
         bfw.write(c.getColumnName(i)); 
       } 
       // change the line 
       bfw.newLine(); 
       // write data 
       for (int i = 0; i < rowCount; i++) { 
        c.moveToPosition(i); 
        Log.v("exporting data", "exportting" + (i + 1) + "line"); 
        for (int j = 0; j < colCount; j++) { 
         if (j != colCount - 1) 
          bfw.write(c.getString(j) + ','); 
         else 
          bfw.write(c.getString(j)); 
        } 
        // change line 
        bfw.newLine(); 
       } 
      } 

我用的onPause在MainActivity.java调用ExportToCSV:

@Override 
protected void onPause() { 
    super.onPause(); 
    DBAdapter myDatabase=new DBAdapter(this); 
    myDatabase.open(); 
    Cursor c=myDatabase.getAllgpspoint(); 
// this method was defined in DBAdapter.java and returned a Cursor 
    myDatabase.ExportToCSV(c, "IRI.csv"); 
    myDatabase.close(); 
     mSensorManager.unregisterListener(this); 
    } 
+0

你是什么意思“无法响应出口”?是否有任何函数*未被调用?你有例外吗? –

+0

虽然应用程序不断生成数据,但似乎ExportToCSV无法运行。我在HTC状态下运行该应用程序,它显示“Acitivity MainActivity(在应用程序数据库中)没有响应。” –

回答

0

您必须在最后关闭文件。

bfw.close();