# In eier File schreiben



## guguli (30. Sep 2014)

Hallo zusammen,

ich schreib eine App womit ich die Beschleunigung messe in X_Y_Z_Achse messe. nun möchte ich diese Werte in einer TXT datei schreiben. 

Die beschleunigung messe ich wie folgt:

```
EditText myText;
public void onSensorChanged(SensorEvent event) {

		Sensor mySensor = event.sensor;

		if (mySensor.getType() == Sensor.TYPE_ACCELEROMETER) {
			float x = event.values[0];
			float y = event.values[1];
			float z = event.values[2];

			long curTime = System.currentTimeMillis();

			if ((curTime - lastUpdate) > 100) {
				long diffTime = (curTime - lastUpdate);
				lastUpdate = curTime;

				float speed = Math.abs(x + y + z - last_x - last_y - last_z)
						/ diffTime * 10000;

				last_x = x;
				last_y = y;
				last_z = z;
				title.setText(R.string.app_name);
				tv.setText("X axis" + "\t\t" + last_x);
				tv1.setText("Y axis" + "\t\t" + last_y);
				tv2.setText("Z axis" + "\t\t" + last_z);
			}
		}
	}
```

und um diese werte in der datei zu schreiben erzeuge ich eine datei dann schreibe ich in dieser wie folgt:

```
private void save() {
		FileOutputStream fos = null;
		try {
			fos = openFileOutput("mynote.txt", MODE_PRIVATE);
			fos.write(myText.setText("X axis" + "\t\t" + last_x);
		} catch (FileNotFoundException e) {
			Log.e("CreateFile", e.getLocalizedMessage());
		} catch (IOException e) {
			Log.e("CreateFile", e.getLocalizedMessage());
		} finally {
			if (fos != null) {
				try {
					fos.flush();
					fos.close();
				} catch (IOException e) {
					e.printStackTrace();
				}
			}
		}

	}
```
das problem ist jedoch hier
 fos.write(myText.setText("X axis" + "\t\t" + last_x);

ich kann das nicht so anwenden. Kann mir einer bitte helfen????

THX


----------



## sti (30. Sep 2014)

Du nennst doch schon das Problem! 


```
fos.write(myText.setText("X axis" + "\t\t" + last_x);
```

Du versuchst
1. einen Text zu setzen sowohl in deiner txt datei + deines Textfeldes
2. fehlt eine Klammer!


```
String txt = "X axis" + "\t\t" + last_x;
fos.write(txt);
myText.setText(txt);
```


----------



## guguli (1. Okt 2014)

aber fos.write(txt); geht nicht, da txt ein int sein muss. 
und ich hab aber String txt. Ich verstehe aber auch nicht wieso write() ein int übergeben bekommt


----------



## sti (1. Okt 2014)

Du verwendest einen Fileoutputstream. Dieser schreibt byteweise. (Das steht auch in den Docs!!)

Also entweder deinen String in einen ByteArray umwandeln oder einen anderen Writer nehmen. (FileWriter z.B. )


----------



## guguli (1. Okt 2014)

ok mit txt.getByte() funktioniert. 

Aber jetzt eine andere Frage.
Die werte ändern sich ja ständig, nun wenn ich den save buton klicke dann habe ich den einen Wert in diesem Moment. Ich mochte aber wenn ich den save button klicke alle werte ab diesem Zeitpunkt haben. 
Wie kann ich dies denn realisieren???

THX


----------



## dzim (1. Okt 2014)

Du willst eigentlich so etwas wie ein recording machen, was?
Vielleicht solltest du dann deinen Ansatz etwas vergössern: Einen Service, der die Daten sammelt und der nach seinem Start per Broadcasts gesteuert wird. Im Intent zum Start des Services könnte dann noch der Pfad für die Datei als Extra enthalten sein. Ein Brodcast sagt ihm, wann er stoppen soll. #onStop oder wie das heisst sichert die Daten dann...


----------



## guguli (1. Okt 2014)

kennste vllt einen Link bzw. einen Bsp Code  ???


----------



## dzim (1. Okt 2014)

Android Developers ????
--> developer.android.com/guide/components/services.html

oder bei Lars Vogel 
--> Android Services - Tutorial
--> Android BroadcastReceiver - Tutorial

Alles eigentlich über Google o.ä. leicht zu finden, oder?


----------



## sti (1. Okt 2014)

Ansonsten hier ein relativ fauler Ansatz ohne zu denken:


```
EditText myText;
boolean saveData = false;
public void onSensorChanged(SensorEvent event) {
 
		Sensor mySensor = event.sensor;
 
		if (mySensor.getType() == Sensor.TYPE_ACCELEROMETER) {
			float x = event.values[0];
			float y = event.values[1];
			float z = event.values[2];
 
			long curTime = System.currentTimeMillis();
 
			if ((curTime - lastUpdate) > 100) {
				long diffTime = (curTime - lastUpdate);
				lastUpdate = curTime;
 
				float speed = Math.abs(x + y + z - last_x - last_y - last_z)
						/ diffTime * 10000;
 
				last_x = x;
				last_y = y;
				last_z = z;
				title.setText(R.string.app_name);
				tv.setText("X axis" + "\t\t" + last_x);
				tv1.setText("Y axis" + "\t\t" + last_y);
				tv2.setText("Z axis" + "\t\t" + last_z);
if(saveData){
save();
}

			}
		}
	}
```

-> Also einfacher Boolwert der bei drücken des Saveknopfs auf true gesetzt wird. (Bei erneutem Klick auf false)


----------

