Autore Topic: Errore lettura file  (Letto 354 volte)

Offline davix10

  • Utente normale
  • ***
  • Post: 155
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Lg G4
  • Play Store ID:
    davix10
  • Sistema operativo:
    Windows 10
Errore lettura file
« il: 05 Ottobre 2014, 13:09:56 CEST »
0
Ciao, devo leggere un file txt che contiene dei numeri interi e per farlo utilizzo questo sistema:

Codice (Java): [Seleziona]
try {
                                File myFile = new File(((Context)this).getExternalFilesDir(null), result);
                                FileInputStream fIn = new FileInputStream(myFile);
                                BufferedReader myReader = new BufferedReader(
                                                new InputStreamReader(fIn));
                                String aDataRow = "";
                                String aBuffer = "";
                                       
                                       
                                while ((aDataRow = myReader.readLine()) != null) {
                                        aBuffer += aDataRow + "\n";
                                //      datiRicevuti[contare]= Integer.parseInt(aBuffer);
                                        contare++;
                                }
                        //      String s = String.valueOf(datiRicevuti[3]);
                                myReader.close();
                                Toast.makeText(getBaseContext(),aBuffer,Toast.LENGTH_SHORT).show();
                        }
                        catch (IOException e) {
                            //You'll need to add proper error handling here
                        }
il mio problema è che mi da errore su questa linea
Codice (Java): [Seleziona]
datiRicevuti[contare]= Integer.parseInt(aBuffer); e questo è il logcat
Codice: [Seleziona]
10-05 12:53:30.132: E/AndroidRuntime(28243): FATAL EXCEPTION: main
10-05 12:53:30.132: E/AndroidRuntime(28243): Process: com.example.pie, PID: 28243
10-05 12:53:30.132: E/AndroidRuntime(28243): java.lang.RuntimeException: Failure delivering result ResultInfo{who=null, request=1, result=-1, data=Intent { (has extras) }} to activity {com.example.pie/com.example.pie.MainActivity}: java.lang.NumberFormatException: Invalid int: "14160.0
10-05 12:53:30.132: E/AndroidRuntime(28243): "
10-05 12:53:30.132: E/AndroidRuntime(28243):         at android.app.ActivityThread.deliverResults(ActivityThread.java:3389)
10-05 12:53:30.132: E/AndroidRuntime(28243):         at android.app.ActivityThread.handleSendResult(ActivityThread.java:3432)

Non riesco a capire perchè non mi converte la stringa come intero e ottengo quell'errore. Qualcuno può aiutarmi? Grazie!

Offline Illogica

  • Nuovo arrivato
  • *
  • Post: 32
  • Respect: +4
    • Google+
    • Mostra profilo
    • Illogica Software
  • Dispositivo Android:
    Caterpillar B15Q / Asus Padfone Infinity / Htc Pyramid / Samsung Galaxy *
  • Play Store ID:
    Illogica Software
  • Sistema operativo:
    Ubuntu 14.04
Re:Errore lettura file
« Risposta #1 il: 05 Ottobre 2014, 13:32:04 CEST »
0
14160.0 non é un intero! Giustamente ti viene  lanciata una eccezione.
Prova Double.parseDouble() per ottenere il numero, e Double.intValue()  per  convertirlo ad intero.


Offline davix10

  • Utente normale
  • ***
  • Post: 155
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Lg G4
  • Play Store ID:
    davix10
  • Sistema operativo:
    Windows 10
Re:Errore lettura file
« Risposta #2 il: 05 Ottobre 2014, 14:28:57 CEST »
0
Avevo provato anche così ma ottengo questo errore:

Codice: [Seleziona]
10-05 14:27:58.873: E/AndroidRuntime(5273): FATAL EXCEPTION: main
10-05 14:27:58.873: E/AndroidRuntime(5273): Process: com.example.pie, PID: 5273
10-05 14:27:58.873: E/AndroidRuntime(5273): java.lang.RuntimeException: Failure delivering result ResultInfo{who=null, request=1, result=-1, data=Intent { (has extras) }} to activity {com.example.pie/com.example.pie.MainActivity}: java.lang.NullPointerException
10-05 14:27:58.873: E/AndroidRuntime(5273):         at android.app.ActivityThread.deliverResults(ActivityThread.java:3389)
10-05 14:27:58.873: E/AndroidRuntime(5273):         at android.app.ActivityThread.handleSendResult(ActivityThread.java:3432)

Offline Illogica

  • Nuovo arrivato
  • *
  • Post: 32
  • Respect: +4
    • Google+
    • Mostra profilo
    • Illogica Software
  • Dispositivo Android:
    Caterpillar B15Q / Asus Padfone Infinity / Htc Pyramid / Samsung Galaxy *
  • Play Store ID:
    Illogica Software
  • Sistema operativo:
    Ubuntu 14.04
Re:Errore lettura file
« Risposta #3 il: 05 Ottobre 2014, 15:26:08 CEST »
0
E' il logcat completo? Sicuro che un po' più in giù nel logcat non ci sia una riga che inizia con "caused by: [...]"?

Offline davix10

  • Utente normale
  • ***
  • Post: 155
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Lg G4
  • Play Store ID:
    davix10
  • Sistema operativo:
    Windows 10
Re:Errore lettura file
« Risposta #4 il: 05 Ottobre 2014, 16:50:10 CEST »
0
ecco la parte che dici tu:
Codice: [Seleziona]
10-05 16:49:12.784: E/AndroidRuntime(29021): Caused by: java.lang.NumberFormatException: Invalid double: "14160.0
10-05 16:49:12.784: E/AndroidRuntime(29021): 13984.0
10-05 16:49:12.784: E/AndroidRuntime(29021): 14094.0
10-05 16:49:12.784: E/AndroidRuntime(29021): 13722.0
10-05 16:49:12.784: E/AndroidRuntime(29021): 13967.0
10-05 16:49:12.784: E/AndroidRuntime(29021): 13334.0
10-05 16:49:12.784: E/AndroidRuntime(29021): 13899.0
10-05 16:49:12.784: E/AndroidRuntime(29021): 13722.0
10-05 16:49:12.784: E/AndroidRuntime(29021): 98.0
10-05 16:49:12.784: E/AndroidRuntime(29021): 95.0
10-05 16:49:12.784: E/AndroidRuntime(29021): 98.0
10-05 16:49:12.784: E/AndroidRuntime(29021): 100.0
10-05 16:49:12.784: E/AndroidRuntime(29021): 97.0
10-05 16:49:12.784: E/AndroidRuntime(29021): 99.0
10-05 16:49:12.784: E/AndroidRuntime(29021): 98.0
10-05 16:49:12.784: E/AndroidRuntime(29021): -1.0
10-05 16:49:12.784: E/AndroidRuntime(29021): -5.0
10-05 16:49:12.784: E/AndroidRuntime(29021): 1.0
10-05 16:49:12.784: E/AndroidRuntime(29021): 98.014160.0
10-05 16:49:12.784: E/AndroidRuntime(29021): 13984.0
10-05 16:49:12.784: E/AndroidRuntime(29021): 14094.0
10-05 16:49:12.784: E/AndroidRuntime(29021): 13722.0
10-05 16:49:12.784: E/AndroidRuntime(29021): 13967.0
10-05 16:49:12.784: E/AndroidRuntime(29021): 13334.0
10-05 16:49:12.784: E/AndroidRuntime(29021): 13899.0
10-05 16:49:12.784: E/AndroidRuntime(29021): 13722.0
10-05 16:49:12.784: E/AndroidRuntime(29021): 98.0
10-05 16:49:12.784: E/AndroidRuntime(29021): 95.0
10-05 16:49:12.784: E/AndroidRuntime(29021): 98.0
10-05 16:49:12.784: E/AndroidRuntime(29021): 100.0
10-05 16:49:12.784: E/AndroidRuntime(29021): 97.0
10-05 16:49:12.784: E/AndroidRuntime(29021): 99.0
10-05 16:49:12.784: E/AndroidRuntime(29021): 98.0
10-05 16:49:12.784: E/AndroidRuntime(29021): -1.0
10-05 16:49:12.784: E/AndroidRuntime(29021): -5.0
10-05 16:49:12.784: E/AndroidRuntime(29021): 1.0
10-05 16:49:12.784: E/AndroidRuntime(29021): 98.012025.0
10-05 16:49:12.784: E/AndroidRuntime(29021): 13984.0
10-05 16:49:12.784: E/AndroidRuntime(29021): 14094.0
10-05 16:49:12.784: E/AndroidRuntime(29021): 13722.0
10-05 16:49:12.784: E/AndroidRuntime(29021): 12996.0
10-05 16:49:12.784: E/AndroidRuntime(29021): 13334.0
10-05 16:49:12.784: E/AndroidRuntime(29021): 13899.0
10-05 16:49:12.784: E/AndroidRuntime(29021): 13722.0
10-05 16:49:12.784: E/AndroidRuntime(29021): 108.0
10-05 16:49:12.784: E/AndroidRuntime(29021): 95.0
10-05 16:49:12.784: E/AndroidRuntime(29021): 98.0
10-05 16:49:12.784: E/AndroidRuntime(29021): 100.0
10-05 16:49:12.784: E/AndroidRuntime(29021): 98.0
10-05 16:49:12.784: E/AndroidRuntime(29021): 99.0
10-05 16:49:12.784: E/AndroidRuntime(29021): 98.0
10-05 16:49:12.784: E/AndroidRuntime(29021): -4.0
10-05 16:49:12.784: E/AndroidRuntime(29021): 1.0
10-05 16:49:12.784: E/AndroidRuntime(29021): -1.0
10-05 16:49:12.784: E/AndroidRuntime(29021): 100.0"
10-05 16:49:12.784: E/AndroidRuntime(29021):         at java.lang.StringToReal.invalidReal(StringToReal.java:63)
10-05 16:49:12.784: E/AndroidRuntime(29021):         at java.lang.StringToReal.parseDouble(StringToReal.java:269)
10-05 16:49:12.784: E/AndroidRuntime(29021):         at java.lang.Double.parseDouble(Double.java:295)
10-05 16:49:12.784: E/AndroidRuntime(29021):         at com.example.pie.MainActivity.onActivityResult(MainActivity.java:1501)
10-05 16:49:12.784: E/AndroidRuntime(29021):         at android.app.Activity.dispatchActivityResult(Activity.java:5423)
10-05 16:49:12.784: E/AndroidRuntime(29021):         at android.app.ActivityThread.deliverResults(ActivityThread.java:3385)
10-05 16:49:12.784: E/AndroidRuntime(29021):         ... 11 more

Offline bradipao

  • Moderatore globale
  • Utente storico
  • *****
  • Post: 4043
  • keep it simple
  • Respect: +567
    • Github
    • Google+
    • bradipao
    • Mostra profilo
  • Dispositivo Android:
    Nexus 5
  • Play Store ID:
    Bradipao
  • Sistema operativo:
    W7
Re:Errore lettura file
« Risposta #5 il: 05 Ottobre 2014, 16:58:16 CEST »
0
Quando si fa number parsing è sempre opportuno gestire le eccezioni, perchè nessuno ti assicura che la stringa sia un numero valido e quindi far crashare l'app.
NON rispondo a domande nei messaggi privati
Bradipao @ Play Store

Offline davix10

  • Utente normale
  • ***
  • Post: 155
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Lg G4
  • Play Store ID:
    davix10
  • Sistema operativo:
    Windows 10
Re:Errore lettura file
« Risposta #6 il: 05 Ottobre 2014, 17:18:46 CEST »
0
Ho provato a cambiare e ottengo questo errore

Codice: [Seleziona]
10-05 17:17:54.787: E/AndroidRuntime(1265): Caused by: java.lang.NullPointerException
10-05 17:17:54.787: E/AndroidRuntime(1265):         at com.example.pie.MainActivity.onActivityResult(MainActivity.java:1498)
10-05 17:17:54.787: E/AndroidRuntime(1265):         at android.app.Activity.dispatchActivityResult(Activity.java:5423)
10-05 17:17:54.787: E/AndroidRuntime(1265):         at android.app.ActivityThread.deliverResults(ActivityThread.java:3385)
10-05 17:17:54.787: E/AndroidRuntime(1265):         ... 11 more

Offline bradipao

  • Moderatore globale
  • Utente storico
  • *****
  • Post: 4043
  • keep it simple
  • Respect: +567
    • Github
    • Google+
    • bradipao
    • Mostra profilo
  • Dispositivo Android:
    Nexus 5
  • Play Store ID:
    Bradipao
  • Sistema operativo:
    W7
Re:Errore lettura file
« Risposta #7 il: 05 Ottobre 2014, 17:33:06 CEST »
0
Non hai postato il codice quindi non so come hai cambiato, però come dicevo sopra bisogna sempre gestire l'eccezione quando si fa number parsing.

Esempio (scrivo al volo senza testare), prova a cambiare:
datiRicevuti[contare]= Integer.parseInt(aBuffer);

con:
Codice (Java): [Seleziona]
try { datiRicevuti[contare]= Integer.parseInt(aBuffer); } catch (Exception e) { datiRicevuti[contare]= 0; }
Se riesce a convertire bene, altrimenti mette 0.
NON rispondo a domande nei messaggi privati
Bradipao @ Play Store

Offline davix10

  • Utente normale
  • ***
  • Post: 155
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Lg G4
  • Play Store ID:
    davix10
  • Sistema operativo:
    Windows 10
Re:Errore lettura file
« Risposta #8 il: 05 Ottobre 2014, 17:39:26 CEST »
0
Ho provato a fare come dici te, il codice diventa così:

Codice (Java): [Seleziona]
String aDataRow = "";
                                        String aBuffer = "";


                                        while ((aDataRow = myReader.readLine()) != null) {
                                                aBuffer += aDataRow + "\n";
                                                try {
                                                        datiRicevuti[contare]= Integer.parseInt(aBuffer);
                                                }
                                                catch (Exception e)
                                                {
                                                        datiRicevuti[contare]= 0;
                                                }
                                                contare++;
                                        }

e il logcat questo:

Codice: [Seleziona]
10-05 17:38:15.977: E/AndroidRuntime(5846): FATAL EXCEPTION: main
10-05 17:38:15.977: E/AndroidRuntime(5846): Process: com.example.pie, PID: 5846
10-05 17:38:15.977: E/AndroidRuntime(5846): java.lang.RuntimeException: Failure delivering result ResultInfo{who=null, request=1, result=-1, data=Intent { (has extras) }} to activity {com.example.pie/com.example.pie.MainActivity}: java.lang.NullPointerException
10-05 17:38:15.977: E/AndroidRuntime(5846):         at android.app.ActivityThread.deliverResults(ActivityThread.java:3389)
10-05 17:38:15.977: E/AndroidRuntime(5846):         at android.app.ActivityThread.handleSendResult(ActivityThread.java:3432)
10-05 17:38:15.977: E/AndroidRuntime(5846):         at android.app.ActivityThread.access$1300(ActivityThread.java:144)
10-05 17:38:15.977: E/AndroidRuntime(5846):         at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1253)
10-05 17:38:15.977: E/AndroidRuntime(5846):         at android.os.Handler.dispatchMessage(Handler.java:102)
10-05 17:38:15.977: E/AndroidRuntime(5846):         at android.os.Looper.loop(Looper.java:136)
10-05 17:38:15.977: E/AndroidRuntime(5846):         at android.app.ActivityThread.main(ActivityThread.java:5146)
10-05 17:38:15.977: E/AndroidRuntime(5846):         at java.lang.reflect.Method.invokeNative(Native Method)
10-05 17:38:15.977: E/AndroidRuntime(5846):         at java.lang.reflect.Method.invoke(Method.java:515)
10-05 17:38:15.977: E/AndroidRuntime(5846):         at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:796)
10-05 17:38:15.977: E/AndroidRuntime(5846):         at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:612)
10-05 17:38:15.977: E/AndroidRuntime(5846):         at dalvik.system.NativeStart.main(Native Method)
10-05 17:38:15.977: E/AndroidRuntime(5846): Caused by: java.lang.NullPointerException
10-05 17:38:15.977: E/AndroidRuntime(5846):         at com.example.pie.MainActivity.onActivityResult(MainActivity.java:1503)
10-05 17:38:15.977: E/AndroidRuntime(5846):         at android.app.Activity.dispatchActivityResult(Activity.java:5423)
10-05 17:38:15.977: E/AndroidRuntime(5846):         at android.app.ActivityThread.deliverResults(ActivityThread.java:3385)
10-05 17:38:15.977: E/AndroidRuntime(5846):         ... 11 more

Offline bradipao

  • Moderatore globale
  • Utente storico
  • *****
  • Post: 4043
  • keep it simple
  • Respect: +567
    • Github
    • Google+
    • bradipao
    • Mostra profilo
  • Dispositivo Android:
    Nexus 5
  • Play Store ID:
    Bradipao
  • Sistema operativo:
    W7
Re:Errore lettura file
« Risposta #9 il: 05 Ottobre 2014, 17:46:16 CEST »
0
Non capisco perchè tu appendi ogni stringa al buffer totale e poi cerchi di convertire tutto il buffer.

Converti una riga alla volta, non il buffer di tutte le righe lette fino a quel momento.
NON rispondo a domande nei messaggi privati
Bradipao @ Play Store

Offline davix10

  • Utente normale
  • ***
  • Post: 155
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Lg G4
  • Play Store ID:
    davix10
  • Sistema operativo:
    Windows 10
Re:Errore lettura file
« Risposta #10 il: 05 Ottobre 2014, 17:54:46 CEST »
0
Quindi dovrei sostituire aBuffer con aDataRow da convertire?
Codice (Java): [Seleziona]
while ((aDataRow = myReader.readLine()) != null) {
                                                aBuffer += aDataRow + "\n";
                                                try {
                                                        datiRicevuti[contare]=  Double.parseDouble(aDataRow);
                                                }
                                                catch (Exception e)
                                                {
                                                        datiRicevuti[contare]= 0;
                                                }
                                                contare++;
                                        }

Così?