2012-04-16 21 views
0

私はアンドロイドとSQLでかなり新しいです。私は加速度計からデータを得ることができるアプリケーションを作っています。そして、私はそれらをSQLLiteデータベースに格納しています。その後、私はデータをプロットできるようにデータベースを取り出すつもりです。データ収集にSQLiteを使用する

  1. データをSDカードに使用可能なファイルとして保存するにはどうすればよいですか?私はいくつかの話題を見てきましたが、それを働かせることはできませんでした。私はいくつかの例/チュートリアルが必要だと思います。

  2. 第2に、収集した後、アプリが遅れを開始します。私はそれがDB-クラスでこのようなものです保存方法、である推測:

    public long createEntry(float x, float y, float z, float t) { 
    ContentValues cv = new ContentValues(); 
    cv.put(X_DATA,x); 
    cv.put(Y_DATA,y); 
    cv.put(Z_DATA,z); 
    cv.put(TIME_DATA,t); 
    return ourDatabase.insert(DATABASE_TABLE, null, cv); 
    } 
    

私はあなたが私を助けていただければ幸いです。

答えて

0

質問の最初の部分では、トランザクション内のすべての挿入を実行すると、処理時間が大幅に短縮されます。あなたが挿入を開始する前にこれを行うには、次のコードを呼び出す:

ourDatabase.beginTransaction() 

次にあなたがデータを挿入し終わったら、呼び出し:

ourDatabase.setTransactionSuccessful(); 
ourDatabase.getDb().endTransaction(); 

質問の後半部分に答えるために、あなたがする必要がありますデータベースからデータを取得し、そこからCSVファイルを作成します。

 StringBuilder csv = new StringBuilder(); 

     Cursor cursor = this.db.query("Data", new String[] { "x","y", "z", "t" }, null, null, null, null, null); 

     while (cursor.moveToNext()) { 
      csv.append(cursor.getFloat(0)) 
      .append(",") 
      .append(cursor.getFloat(1)) 
      .append(",") 
      .append(cursor.getFloat(2)) 
      .append(",") 
      .append(cursor.getFloat(3)) 
      .append("\n"); 
     } 

cursor.close(); 

     File outputFile = new File("/sdcard/mycsv.csv"); 

     FileWriter writer; 
     try { 
      writer = new FileWriter(outputFile); 

      writer.write(csv.toString()); 

      writer.close(); 
     } catch (IOException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } 

あなたが行(おそらく数万人)の多くを収集している場合、あなたはでディスクへこのCSVをストリーミングする必要がある場合がありますそれを書いているのと同じ時間。

+0

最初の部分が本当に助けになりました!秒についてこのコードはどこに置くべきですか? DBHelperクラスでメソッドを作成し、データをファイルに保存する必要があるたびに呼び出す必要がありますか? – gedemagt

+0

あなたはどこにでも置くことができます、それは本当にあなたのニーズに依存します。それをあなたのdbhelperに入れても意味がありますが、通常はボタンをクリックするだけです。 –

+0

ありがとう、それは魅力のように動作します! :) – gedemagt

関連する問題