0

私はAndroidとSQLにまったく慣れていません。加速度計からデータを取得できるアプリを作成しており、SQLLiteデータベースに保存しています。その後、データベースを取り出して、データをプロットできるようにするつもりです。2つの質問があります:

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

  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);
    }
    

あなたが私を助けてくれることを願っています。

4

1 に答える 1

0

質問の最初の部分では、トランザクションですべての挿入を実行すると、はるかに高速になります。これを行うには、挿入を開始する前に、次のコードを呼び出します。

ourDatabase.beginTransaction()

次に、データの挿入が完了したら、次を呼び出します。

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

質問の 2 番目の部分に答えるには、データベースからデータを取得し、そこから 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 を書き込むと同時にディスクにストリーミングする必要がある場合があります。

于 2012-04-16T17:25:48.320 に答える