FileOutputStream

Mit dem Debugger bin ich auf :
Code:
12-17 19:10:37.927: E/AndroidRuntime(931): FATAL EXCEPTION: main
12-17 19:10:37.927: E/AndroidRuntime(931): java.lang.NumberFormatException: Invalid int: ""
12-17 19:10:37.927: E/AndroidRuntime(931):     at java.lang.Integer.invalidInt(Integer.java:138)
12-17 19:10:37.927: E/AndroidRuntime(931):     at java.lang.Integer.parse(Integer.java:375)
12-17 19:10:37.927: E/AndroidRuntime(931):     at java.lang.Integer.parseInt(Integer.java:366)
12-17 19:10:37.927: E/AndroidRuntime(931):     at java.lang.Integer.parseInt(Integer.java:332)
12-17 19:10:37.927: E/AndroidRuntime(931):     at de.devTobi.fastfight.Charakter.leseWaffenindex(Charakter.java:192)
12-17 19:10:37.927: E/AndroidRuntime(931):     at de.devTobi.fastfight.Charakter.getaktuellerWaffenindex(Charakter.java:167)
12-17 19:10:37.927: E/AndroidRuntime(931):     at de.devTobi.fastfight.MainActivity$1.onClick(MainActivity.java:38)
12-17 19:10:37.927: E/AndroidRuntime(931):     at android.view.View.performClick(View.java:4204)
12-17 19:10:37.927: E/AndroidRuntime(931):     at android.view.View$PerformClick.run(View.java:17355)
12-17 19:10:37.927: E/AndroidRuntime(931):     at android.os.Handler.handleCallback(Handler.java:725)
12-17 19:10:37.927: E/AndroidRuntime(931):     at android.os.Handler.dispatchMessage(Handler.java:92)
12-17 19:10:37.927: E/AndroidRuntime(931):     at android.os.Looper.loop(Looper.java:137)
12-17 19:10:37.927: E/AndroidRuntime(931):     at android.app.ActivityThread.main(ActivityThread.java:5041)
12-17 19:10:37.927: E/AndroidRuntime(931):     at java.lang.reflect.Method.invokeNative(Native Method)
12-17 19:10:37.927: E/AndroidRuntime(931):     at java.lang.reflect.Method.invoke(Method.java:511)
12-17 19:10:37.927: E/AndroidRuntime(931):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793)
12-17 19:10:37.927: E/AndroidRuntime(931):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560)
12-17 19:10:37.927: E/AndroidRuntime(931):     at dalvik.system.NativeStart.main(Native Method)

Als fehler irgendwo gekommen.... Könnte es sein, dass ich das Ergebniss nicht als Integer parsen sollte?^^
 
paxis schrieb:
Mit dem Debugger bin ich auf :
Code:
12-17 19:10:37.927: E/AndroidRuntime(931): FATAL EXCEPTION: main
12-17 19:10:37.927: E/AndroidRuntime(931): java.lang.NumberFormatException: Invalid int: ""

Als fehler irgendwo gekommen.... Könnte es sein, dass ich das Ergebniss nicht als Integer parsen sollte?^^

Ne, da steht doch dein Fehler :D
Ein Integer ist nichts :)
 
  • Danke
Reaktionen: paxis
Joo,

die frage ist nur wo ich die jetzt finde :p!
Ich suche mal ^^
Ne idee wo der Fehler ist?
irgendwie finde ich das nciht :O

Der ursprüngliche Beitrag von 20:25 Uhr wurde um 21:29 Uhr ergänzt:

Jetzt wird es mysteriös...

Ich habe dafür gesorgt, dass die null verschwindet, aber jetzt stürtzt die App einfach ab und im Log kommt gar kein Fehler :O
 
Zuletzt bearbeitet:
at de.devTobi.fastfight.Charakter.leseWaffenindex(Charakter.java:192)
12-17 19:10:37.927: E/AndroidRuntime(931): at de.devTobi.fastfight.Charakter.getaktuellerWaffenindex(Charakter.java:167)
12-17 19:10:37.927: E/AndroidRuntime(931): at de.devTobi.fastfight.MainActivity$1.onClick(MainActivity.java:38)


Da vll.?
 
Nochmal ein kleines Update...
Vielleicht findet ja noch jemand Zeit, ich schreibe hier mal ganz ausfürhlich alles wichtige hin:
MainActivity:
Code:
Charakter ch = new Charakter(MainActivity.this,1, 1);
        ch.create(MainActivity.this, 1,1);Intent intent = new Intent(MainActivity.this,Charakteruebersicht.class);
            startActivity(intent);

Charakterübersicht:
Code:
setContentView(R.layout.charakteruebersicht);
        TextView CT= (TextView) findViewById(R.id.tVCharakter);
        Charakter ch = new Charakter(Charakteruebersicht.this);
        Item it;
        Waffen waf = new Waffen();
        Rüstungen rüs = new Rüstungen();
        int waffe=waf.gibItem(ch.getaktuellerWaffenindex(Charakteruebersicht.this)).getWaffenschaden();
        int ruestung=rüs.gibItem(ch.getaktuellerRüstungsindex(Charakteruebersicht.this)).getRüstungswert();
        Log.d("Waffe", String.valueOf(waffe));
        Log.d("Rüstung", String.valueOf(ruestung));
        CT.setText("Der aktuelle Waffenschaden beträgt"+waffe +"!  Der aktuelle Rüstungswert beträgt:" +ruestung );
Die Methoden aus charakter:
Code:
 public Charakter(Context pct,int paktuellerWaffenindex, int paktuellerRüstungsindex) {
        ct=pct;
        aktuellerWaffenindex=paktuellerWaffenindex;
        aktuellerRüstungsindex=paktuellerRüstungsindex;
        this.writeWaffe(ct,aktuellerWaffenindex);
        this.writeRüstung(ct,aktuellerRüstungsindex);
}
 public Charakter(Context pct) {
     ct=pct;
     aktuellerWaffenindex=1;
        aktuellerRüstungsindex=1;
        this.writeWaffe(ct,aktuellerWaffenindex);
        this.writeRüstung(ct,aktuellerRüstungsindex);
        
    // TODO Auto-generated constructor stub
}
 
 public void create(Context pct,int paktuellerWaffenindex, int paktuellerRüstungsindex) {
        ct=pct;
        aktuellerWaffenindex=paktuellerWaffenindex;
        aktuellerRüstungsindex=paktuellerRüstungsindex;
        this.writeWaffe(ct,aktuellerWaffenindex);
        this.writeRüstung(ct,aktuellerRüstungsindex);
 }private void writeRüstung(Context ct2, int aktuellerRüstungsindex2) {
     File Meinspeicherort = new File(ct2.getCacheDir()+"/"+"Rüstung.txt");
     BufferedWriter out=null;
     try {
        Meinspeicherort.createNewFile();
    } catch (IOException e1) {
        // TODO Auto-generated catch block
        e1.printStackTrace();
    }

    try {
        out = new BufferedWriter(new FileWriter(Meinspeicherort));
    } catch (IOException e1) {
        // TODO Auto-generated catch block
        e1.printStackTrace();
    }
     try {
          
            out.write ( aktuellerRüstungsindex2 ) ;
            out.flush ( ) ;
            out.close();
     
        } catch ( Exception e ) {
            e.printStackTrace ( ) ;
        }finally
        {
       }
    }
 public void setaktuellerRüstungsindex(int pIndex){
     aktuellerRüstungsindex=pIndex;
 }
 
 
 public int getaktuellerRüstungsindex(Context pct){
     int Rückgabe= this.leseRüstungsindex(pct);
     return Rückgabe;
 }
private int leseRüstungsindex(Context ct2) {
    String state = Environment.getExternalStorageState();
    File filesDir= new File(ct2.getCacheDir()+"/"+"Rüstung.txt");
     String datax = "1" ;
        try {
            
            FileInputStream fIn = new FileInputStream (filesDir) ;
            InputStreamReader isr = new InputStreamReader ( fIn ) ;
            BufferedReader buffreader = new BufferedReader ( isr ) ;

            String readString = buffreader.readLine ( ) ;
            while ( readString != null ) {
                datax =  readString ;
                readString = buffreader.readLine ( ) ;
            }

            isr.close ( ) ;
        } catch ( IOException ioe ) {
            ioe.printStackTrace ( ) ;
        }
        return Integer.parseInt(datax);
    }
}

zur Zeit stürtzt die App einfach so ab, d.h. es kommt einfach die Meldung das es unerwartet geschlossen wurde. Im Log steht kein Fehler...
Ich dreh noch durch eh ^^
 
Ich vermute der Fehler liegt immer noch beim parseInt().

Aber beim Waffenindex!
Du musst die Fehlermeldung von oben nach unten lesen.
In dem Beispiel NumberformatException passiert hier:
java.lang.Integer.invalidInt(Integer.java:138)

invalidint() wird aufgerufen von:
java.lang.Integer.parse(Integer.java:375)
usw. bis du zu deiner Klasse kommst:

at de.devTobi.fastfight.Charakter.leseWaffenindex(Charakter.java:192)

Hier siehst du dann, dass der Fehler in der Charakter Klasse in Zeile 192, in der methode leseWaffenindex.
Hier machst du wahrscheinlich ein parseInt().
Mit einem String, den du aus der Datei ausgelesen hast, nur hast du an der Stelle nur einen leeren String weil die Datei vermutlich leer ist.

Also machst du quasi Integer.parseInt("").
Aus einem leeren String kann er aber keine Zahl machen (Welche auch).
Deswegen wird dann eine Exception geworfen.
Die NumberFormatException, die wie der Name schon sagt, dann passiert, wenn das Nummer Format nicht stimmt was bei "" der Fall ist (würde z.B. auch fliegen wenn du "eins" da stehen hast)
 
kleinerkathe schrieb:

Schau dir nochmal den Beitrag an ... im Logcat sind sogar die Zeilennummer angegeben. Jetzt würde der findige Programmierer vll. davor mehrere Log-Statements ausgeben um sich bspw. den Wert dieses int´s dass den Fehler verursacht ausgeben. Sollte es keine Zahl sein (sowie amfa jetzt glaub ich bereits mehrmals vermutete), würde man sich auf die Spur machen woher den dieser Wert kommt. Anscheinend wird er an dieser Stelle falsch ausgelesen. Sitz dich hin und verfolge das Problem selbst :) Grenze es ein so weit wie du kannst und wenn du dann immer noch nicht weißt wieso es nicht funktioniert, dann poste exakt die Codestellen, die deiner Meinung nach dafür verantwortlich sind (vmtl. stimmt das was amfa schreibt: du liest die Zahl nicht richtig aus).

Und bitte lerne es logcat-Meldungen selbst zumindest im Grundsatz zu verfolgen! Ich mein, warum schreibst du hier die Ausgabe rein und wir müssen dich dann auf exakt die Zeilennummern stoßen die dort eh schon genannt werden (die Zeilennummern sind sogar bei dir anklickbar und führen dich direkt an die entsprechende Zeile ...)
 
So ich habe mal viele Logs usw. weiter gesetzt und bin glaube ich auf das Problem gestoßen, also:
Folgender Log wird korrekt ausgegeben:
out.write ( aktuellerWaffenindex2 ) ;
out.flush ( ) ;
Log.d("Geschrieben Waffe", String.valueOf(aktuellerWaffenindex2));
out.close();

Heißt es scheint zumindest so, dass er schreibt....!
Aber es hapert wohl mit dem lesen, beim lesen gibt er nämlich die Variable immer mit gar nichts an, da die variable also mit "" vorher inialisiert wird, wird sie wohl mit der Lesen Methode nicht überschrieben.

Ich habe jetzt neben meiner Readermethode andere Codeteile benutzt und bei allen kommt die falsche variable raus. Dummerweise kommen auch keine Fehler im Log, die App friert einfach ein.. Die Frage ist nur, was an diesen Lesemethoden die wohl bei anderen funktionieren, bei mir nicht funktioniert... Hier mal eine Methode:
Code:
 File filesDir= new File(ct2.getCacheDir()+"/"+"Waffen.txt");
     String aBuffer="";
     try {
                        FileInputStream fIn = new FileInputStream(filesDir);
            BufferedReader myReader = new BufferedReader(
                    new InputStreamReader(fIn));
           
            aBuffer = myReader.readLine();
          Log.d("Gelesen Waffe:", aBuffer);
            myReader.close();
                
        } catch (Exception e) {
            
        }
     int back = Integer.parseInt(aBuffer);
    return back;
        }
Wohlgemerkt: Beim Log.d sagt der schon nichts, also der String scheint noch "" zu sein....
 
paxis schrieb:
Code:
 File filesDir= new File(ct2.getCacheDir()+"/"+"Waffen.txt");
     try {
                        FileInputStream fIn = new FileInputStream(filesDir);
            BufferedReader myReader = new BufferedReader(
                    new InputStreamReader(fIn));
           
          String aBuffer = myReader.readLine();
          Log.d("Gelesen Waffe:", aBuffer);
            myReader.close();
                
        } catch (Exception e) {
            
        }
     int back = Integer.parseInt(aBuffer);
    return back;
        }
Probiers mal so, vllt hilft das :)
 
@Greenstar: Das kann garnicht helfen, da dadurch aBuffer nur noch innerhalb des try-Blockes sichtbar ist und garnicht danach per Integer.parseInt(aBuffer) darauf zugegriffen werden kann ;)

Was steht in der ersten Zeile von Waffen.txt? Sicher, dass du darauf zugreifst per ct2.getCacheDir()+... ?
 
Habe es geschafft müsste statt read line einfach nur read nehmen

Erstellt mit einem Samsung galaxy, genauer mit dem s+ :D
 
Ergibt sinn,
Du hast ja nur die write() Methode benutzt.
Die schreibt kein "new Line" zeichen in die Datei.
Wenn du mit readLine() aber versuchst eine Zeile zu lesen, aber niemals das ZeilenEnde zeichen in der Datei vorhanden ist, liest er halt unendlich lang weiter ;)

Immerhin klappt es jetzt.
 

Ähnliche Themen

S
Antworten
2
Aufrufe
1.067
starsgate
S
Freddchen
Antworten
3
Aufrufe
1.745
Freddchen
Freddchen
Zurück
Oben Unten