2011-12-14 5 views
1

基本的に、加速度データをtxtファイルにキャプチャしようとしています。このコードは加速度データを文字列に書き込み、それが頻繁に変更されるたびに更新します。私は、データのロギングを開始するトグルボタンを含んでおり、それをファイルに書き込むことになっています。これは奇妙なところです。コードは、ファイルがすでに存在するかどうかを確認し、ファイルの最後に数値を追加して、古いデータを上書きしないようにします。しかし、それはゴミや破損したデータでいっぱいのファイルを作成します。私は、ファイルが既に存在する場合は、ファイルに良いデータを書き込むが、ファイルを作成する必要がある場合は、破損したファイルが作成されることを確認した。コードを以下に示します。ファイルの破損に何が起こっているのか分かりません。新しいファイルが作成されたときにBuffered Writerが破損データをロードする

私は私のマニフェスト

"<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>" 

破損したデータとログファイル

#EO'MyÎ&¸OE- `ID ïÇDêç³òß¼( 1番目 ûの例で宣言されている

package com.accelerometermonitor; 

import java.io.BufferedWriter; 
import java.io.File; 
import java.io.FileWriter; 
import java.io.IOException; 

import android.app.Activity; 
import android.hardware.Sensor; 
import android.hardware.SensorEvent; 
import android.hardware.SensorEventListener; 
import android.hardware.SensorManager; 
import android.os.Bundle; 
import android.view.View; 
import android.view.View.OnClickListener; 
import android.widget.Button; 
import android.widget.TextView; 
import android.widget.Toast; 

public class AccelerometerMonitorActivity extends Activity implements OnClickListener{ 
/** Called when the activity is first created. */ 
SensorManager sensorManager; 
Sensor accel; 
TextView xxaxistext; 
TextView yyaxistext; 
TextView zzaxistext; 
Button toggle; 
boolean recordstatus = false; 
StringBuilder databuilder; 
String data; 
TextView testing; 
String xstring; 
String ystring; 
String zstring; 
int filecounter=0; 
boolean notdone = true; 


@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 
    sensorManager = (SensorManager)getSystemService(SENSOR_SERVICE); 
    accel = sensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER); 
    toggle=(Button)findViewById(R.id.togglebutt); 
    toggle.setOnClickListener(this); 
     xxaxistext=(TextView)findViewById(R.id.xaxistext); 
     yyaxistext=(TextView)findViewById(R.id.yaxistext); 
     zzaxistext=(TextView)findViewById(R.id.zaxistext); 
     testing=(TextView)findViewById(R.id.testtext); 
} 

@Override 
public void onStart(){ 
    super.onStart(); 
    while (notdone) { //establishes existing logfile number to be used and stored 
     File logFile = new File("/sdcard/log"+""+ filecounter +".txt"); 
     if (logFile.exists()){ 
      filecounter++; 
     } 
     else { 
      notdone = false; 
     } 


    } 



} 

protected void onResume() { 
    super.onResume(); 
    sensorManager.registerListener(accelListener, accel,        
SensorManager.SENSOR_DELAY_NORMAL); 
} 

protected void onPause() { 
    super.onPause(); 
    sensorManager.unregisterListener(accelListener); 
} 
private SensorEventListener accelListener = new SensorEventListener(){ 
    public void onAccuracyChanged(Sensor sensor, int accuracy) { 

} 

public void onSensorChanged(SensorEvent event) { 

float x = event.values[0]; 
float y = event.values[1]; 
float z = event.values[2]; 
update(x, y, z); 


} 
}; 
public void update (float x, float y, float z){//sets textview to appropriate number 
    xxaxistext.setText("X Axis:" +""+ x); 
    yyaxistext.setText("Y Axis:" +""+ y); 
    zzaxistext.setText("Z Axis:" +""+ z); 
    //save to string 
    data=""; 
xstring=("" + x); 
ystring=("" + y); 
zstring=("" + z); 

data=data.concat(xstring + "," + ystring +"," + zstring +"\n"); 


    // testing.setText("result:" + data); 

    appendLog(data, filecounter); 
    } 


    public void onClick(View target) { 

    if (recordstatus==false){ 

      toggle.setText("Stop");  
     recordstatus = true; 
     appendLog(data, filecounter); 
     testing.setText("Logging"); 

    } 
    else{ 
     //Stop recording 
     recordstatus = false; 
    toggle.setText("Start"); 
    testing.setText("logging stopped"); 
    filecounter++; 
    } 
    } 

    public void appendLog(String text, int filecounter) 
    {  
     if(recordstatus==true){ 

      File logFile = new File("/sdcard/log"+""+ filecounter +".txt"); 

    testing.setText("working"); 
    if (!logFile.exists()) 
    { 
     try 
     { 
     logFile.createNewFile(); 
    Toast toast= Toast.makeText(this,"new file created",0); 
    toast.show(); 
    BufferedWriter buf1 = new BufferedWriter(new FileWriter(logFile , false)); 
    buf1.write(13); 
    buf1.newLine(); 
    buf1.flush(); 
    buf1.close(); 

     } 
    catch (IOException e) 
     { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } 
    } 
    try 
    { 
     // File logaFile = new File("/sdcard/log"+""+ filecounter +".txt"); 
     //BufferedWriter for performance, true to set append to file flag 
     //FileWriter logFile=new FileWriter(logaFile , false); 

     BufferedWriter buf = new BufferedWriter(new FileWriter(logFile , true)); 
     buf.append(text); 
     buf.newLine(); 
     buf.flush(); 
     buf.close(); 
    testing.setText("append working"); 
    } 
    catch (IOException e) 
    { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } 
        } 
    else{ 

    } 
    } 

あなたの意見を教えてください。

答えて

1

私はドロイドXを持っていますが、あなたがドロイドxをUSBストレージデバイスとして接続すると、電話で作成されて保存されているものはすべて暗号化されているということです。そのため、私がデータを見ると、データが破損しているように見えます。私はPCモードで電話を接続すると、ファイルを適切に表示することができます。私はこれが他の誰かに苦痛と苦痛を救うことを願っています。私はそこになかったエラーを修正するために自分のコードを17回書き直しました。

関連する問題