-1

私の問題は、停止ボタンをクリックした後にファイルが空になることですが、16:49:39 に開始ボタンをクリックしてから 16:49:57 に停止ボタンをクリックすると、時間が変更された場合にのみファイルが空になります。しかし、停止ボタン 16:50:01 をクリックすると、ファイルはデータとともに保存されます。なぜこれが起こるのか教えてください。そして、これを解決する方法。以下に、私のアプリケーションのコードを示します。

オンクリック コード:

   @Override
public void onClick(View v) {
    switch (v.getId()) {
        case R.id.startButton:
            stoper.start();

            try {
                writer = new CSVwriter(dateFormat.format(date));
            } catch (IOException e) {
                e.printStackTrace();  
            }
            handler.postDelayed(UpdateView, 120);
            break;
        case R.id.stopButton:
            stoper.stop();

            try {
                writer.closeFile();
            } catch (IOException e) {
                e.printStackTrace();  
            }
            break;
    }
}

private Runnable UpdateView = new Runnable() {
    public void run() {
        timerText.setText(stoper.toString());
        pulsText.setText(""+accelerationX);

        try {
             writer.insertLine(new DataObject(stoper.toString(), accelerationX, accelerationY, accelerationZ));
         } catch (IOException e) {
            e.printStackTrace();
        }

        handler.postDelayed(UpdateView, 100);
        }
};

OnCreate コード:

@Override
    public void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        View startBtn = findViewById(R.id.startButton);
        startBtn.setOnClickListener(this);
        View stopBtn = findViewById(R.id.stopButton);
        stopBtn.setOnClickListener(this);


        handler = new Handler();


    }
4

1 に答える 1

1

ライターに flush() メソッドがある場合、手動で flush() を呼び出してみましたか? (CSVwriter が独自のクラスでない限り、ほとんどのファイル書き込みクラスには flush() メソッドが必要です。)

ストリームを手動でフラッシュすると役立つ場合があります。

編集:補足として、stoper.stop() がエラーをスローすることはありますか? ファイルがフラッシュされて閉じられた後に常に呼び出されるように、finally ブロックでファイルが閉じられた後に移動する場合。

于 2012-04-06T14:30:17.713 に答える