0

これらのデータが外部SDカードのテキストファイルに保存され、データが正しく保存され、ファイルが正常に作成されるように、光センサーデータを収集するアプリケーションを実行しましたが、問題は、アプリケーションがデバイスでx期間実行されたときです(例:1分)データは保存されますが、アプリケーションを閉じて同じ期間デバイスから再実行すると、新しく収集されたデータが以前の実行から以前に保存されたデータに追加保存されます。テキストファイルは、実行するたびに増加します。
実行するたびに、収集されたデータはテキストファイルに完全に保存されます(実行中、つまり1分間)。アプリケーションを再度実行すると、新しい実行の新しい収集データが以前のデータに上書きされます保存されたデータ。

つまり、アプリの実行が開始されたときに、収集されたすべての読み取り値を配列リストに入れ、実行が停止すると、配列リストは収集されたすべてのデータをテキストファイルに出力しますが、アプリを再実行すると配列リストも収集データを収集し、以前の実行中の保存データの横にあるテキスト ファイルに追加します。これは解決する必要がある問題です。以前の実行中の保存データに新しい実行中の収集データを上書きする必要があります。

光センサー データを収集するコードは次のようになります。

    @Override
    public void onSensorChanged(SensorEvent event) {
        if(event.sensor.getType()==Sensor.TYPE_LIGHT){
            max =  msensorManager.getDefaultSensor(Sensor.TYPE_LIGHT).getMaximumRange();
            //getMaximumRange() is the maximum range of the sensor in the sensor's unit.
            //tv1.setText("Max Reading: " + String.valueOf(max));
            tv1.setText(msg +"Max Reading: " + String.valueOf(max) );
            tv1.invalidate();
            lightMeter.setMax((int)max);
            //setMax is the max  of the upper range of this progress bar 
            currentReading = event.values[0];
            //timestamp = event.timestamp;
            lightMeter.setProgress((int)currentReading);
            Toast.makeText(MainActivity.this,"Event Happend '", Toast.LENGTH_SHORT).show();
            tv2.setText("Current Reading: " + String.valueOf(currentReading));
            current_reading_list.add((double) currentReading);


        }

配列リストからファイルに書き込むコードは次のようになります。

public void writing_in_file_1(){


    try{
        fw  = new FileWriter(file_1, true);
        bw  = new BufferedWriter(fw);
        out = new PrintWriter(bw);
        //out.append( String.valueOf(currentReading + " \t"));
        //out.append(String.valueOf(current_reading_list));
        out.print(String.valueOf(current_reading_list));
        out.flush();

        Toast.makeText(this,"Done writing SD 'specific text file'", Toast.LENGTH_SHORT).show();
    }
    catch   (IOException e)
    {
        e.printStackTrace();
    }
    finally{
        try {
            bw.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

停止ボタンが押されると、書き込みが行われます。

@Override
public void onClick(View v) {
    switch (v.getId()) {
    case R.id.bt1:
        counter_function();
        //onResume();
        break;

    case R.id.bt2:
        onPause();
        writing_in_file_1();


        tv1.setText("");
        tv2.setText("");
        break;

    default:
        break;
    }



}

誰でも私を助けることができますか?

前もって感謝します。

4

1 に答える 1

0

コンストラクタFileWriter(File file, boolean append)を append = true で使用しています

交換

fw  = new FileWriter(file_1, true);

fw  = new FileWriter(file_1, false);
于 2013-10-02T09:39:45.810 に答える