Datentypen Richtiges Format abspeichern

Hallo zusammen, ich bin neu in Java. Mein Ziel ist es Messdaten die ich am Handy empfange (µC+Bluetooth) auf meine SD-Karte zu speichern. Dies gelingt schon mal. Nur bekomme ich in meiner Text-Datei lauter ? ? ? ? ? ? (Fragezeichen zurück). Ist auch nicht verwunderlich, der Fehler ist klar, nur wie ich auf die Lösung komme nicht.

Das Handy wandelt Empfangenes in einen String. Versendet werden aber reine Roh-werte in Binär.

1 Startbit- 8bit- 1 Stopbit. Habe schon versucht richtig zu wandeln aber es hat nichts geändert.

Die Daten können nur auf der Handy-Ebene gewandelt werden.

Mein folgender Code ist dieser:

Java:
h=new

    Handler() {
        public void handleMessage (android.os.Message msg){

            switch (msg.what) {
                case RECIEVE_MESSAGE:                                                   // wenn Daten empfangen werden
                    byte[] readBuf = (byte[]) msg.obj;
                    String strIncom = new String(readBuf, 0, msg.arg1);                 // erstelle String aus Bytes Array
                    sb.append(strIncom);                                                // String anhängen
                    int endOfLineIndex;
   
                    while ((endOfLineIndex = sb.indexOf("|")) >= 0) {                  // wenn end-of-line,
                        String sbprint;                                                 // extrahiere String
                        sbprint = sb.substring(0, endOfLineIndex);
                        sb.delete(0, sb.length());                                      // und löschen
                        // txtArduino.setText("Daten vom MSP430: " + strIncom);          // update
                    
                        try {
                          
                            FileOutputStream fOut = new FileOutputStream(myFile, true);
                            OutputStreamWriter myOutWriter =
                                    new OutputStreamWriter(fOut);
                            myOutWriter.append(sbprint);
                            myOutWriter.close();
                            fOut.close();

                        } catch (Exception e) {
                            Toast.makeText(getBaseContext(), e.getMessage(),
                                    Toast.LENGTH_SHORT).show();
                        }
                    }
                    break;
            }


Danke im Voraus!
 
Zuletzt bearbeitet von einem Moderator:
>Code bitte in entsprechende Code-Tags packen, danke! 🙂

ok, danke.

>Versteh ich Dich richtig, dass Du versuchst Bytes in einen String zu schrieben??
>Sind es denn darstellbare Zeichen ??

Es sind Zahlenwerte. Aber diese werden in Bitformat gesendet und sollten auch nicht als String interpretiert/aufgenommen werden sondern als nackte Rohwerte.
 
Zum Beispiel 0b11111111 = 255 in Decimal.

Ob es letzendlich in dezimal gespeichert wird oder nur 1&0er ist egal, aber eben nicht diese Strings die
zu nichts vernünftiges führen. Sollte doch machbar sein?
 
>habe den Cocde nur kurz überflogen ... leider ist er kaum nachvollziehbar!

Sorry, das hatte ich übersehen.


Java:
switch(msg.what){
               case RECIEVE_MESSAGE:                                                 // hier werden Daten empfangen
                   byte[] readBuf =(byte[]) msg.obj;                          // hier wird ein Buffer zu verfügung gestellt, die Daten sind die Bluetooth-werte
                   String strIncom =new String(readBuf, 0, msg.arg1);               // erstelle String aus Bytes, das was ich nicht haben will, aber nicht weiß wie ich den Buffer "ungestringt" speichere
                    sb.append(strIncom);                                               // String anhängen
                   int endOfLineIndex;
  
                   while((endOfLineIndex = sb.indexOf("|"))>=0){                 // wenn end-of-line, die Zeile ist unwichtig
                       String sbprint;                                               // extrahiere String
                        sbprint = sb.substring(0, endOfLineIndex);
                        sb.delete(0, sb.length());                                     // und löschen
                     
                  
                       try{
                        
                           FileOutputStream fOut =new FileOutputStream(myFile, true); // In die Datei, die erstellt wurde
                           OutputStreamWriter myOutWriter =
                                   new OutputStreamWriter(fOut);
                            myOutWriter.append(sbprint); //schreiben (text-datei).
                            myOutWriter.close();
                            fOut.close();

Ich bin leider frischer Anfänger in Java 🙂
 
Zuletzt bearbeitet von einem Moderator:
... wieso er auch immer jetzt auf URL's zugreift:

Es geht letztendlich darum, Rohwerte als solche zu empfangen und im gleichen Format ungestringt in eine SD-Karte zu schreiben.
 
Eventuell könnte sowas funktionieren?

Code:
public static void main(String[] args) throws IOException
{
	//Beispiel Array
	byte[] readBuf = new byte[4];
	readBuf[0] = 127;
	readBuf[1] = (byte)128;
	readBuf[2] = '|';
	readBuf[3] = 43;
	
	FileOutputStream fOut = new FileOutputStream("out.txt", true);
	OutputStreamWriter myOutWriter = new OutputStreamWriter(fOut); 
	
	for(int i = 0; i < readBuf.length; i++)
	{
		if(readBuf[i] == '|')
		{
			myOutWriter.write(System.getProperty("line.separator"));
			continue;
		}
		
		int write = readBuf[i] & 0xFF;
		myOutWriter.write(String.valueOf(write) + " ");
	}
	
	myOutWriter.close();
	fOut.close();
}
 
Naja die Fehlermeldung sagt doch schon alles aus read-only file system
Sprich du darfst nur lesen und nicht schreiben. Warum/Wieso/Weshalb kann ich dir nicht sagen, aber das sollte doch schon wieder genug Hinweise geben und Stichwörter um per Google zu suchen 😉
 
Das war ja auch nur ein Beispiel. Ersetz das "out.txt" mit deinem myFile.

EDIT: Natürlich nur, wenn dein Code von oben schon mal funktioniert hat.
EDIT 2: Wenn ich in Android eine Datei schreiben möchte (nicht auf SD Karte) dann mache ich das zb so:
Code:
File file = new File("out.txt");
FileOutputStream fout = null;
OutputStreamWriter oout = null;
try
{
  fout = myActivity.openFileOutput(file.getName(), Context.MODE_PRIVATE);
  oout = new OutputStreamWriter(fout);

  oout.write("Das ist ein Test");
}
catch (Throwable e)
{
  e.printStackTrace();
}
finally
{
  try
  {
    oout.close();
    fout.close();
  }
  catch (IOException e)
  {
    e.printStackTrace();
  }
}

Keine Ahnung, ob das überhaupt so richtig ist. Aber es scheint bei mir zumindest so zu funktionieren.
 
Zuletzt bearbeitet:

Zurück
Oben