Autore Topic: conversione string in int e double  (Letto 593 volte)

Offline Gazzerpiece

  • Nuovo arrivato
  • *
  • Post: 13
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    emulatore
  • Sistema operativo:
    Windows 7
conversione string in int e double
« il: 18 Settembre 2013, 14:50:11 CEST »
0
Ciao ragazzi,

sto provando a convertire dei dati String letti da un file in int e double creando degli array. Sembra corretta ma mi va in eccezione NumberFormatException dicendomi quindi che la conversione non è valida.

Mi aiutate a capire dal logcat dove sbaglio?

Codice (Java): [Seleziona]
File extStorageDir = Environment.getExternalStorageDirectory();
                File file = new File(extStorageDir, filename);
                        String text;
                BufferedReader reader = null;
                try {
                        reader = new BufferedReader(new FileReader(file));
                        StringBuffer buffer =new StringBuffer();
                        /*Effettuo la lettura del file*/
                        while((text=reader.readLine())!= null){
                                if(! text.equals("")) {
                                        buffer.append(text);
                                        buffer.append("!"); //ogni riga è separata da !
                                }
                        }
                        text=buffer.toString();
                        /*Estraggo interi e double*/
                        String[] appoggio;
                        appoggio = text.split("!"); //appoggio è un array contenente tante righe quanti sono i dati caricati
                        int lung = appoggio.length; //numero dati caricati
                        int[] valori = new int[lung]; //creo array di interi e double di dimensioni oppurtune
                        double[] tempi = new double[lung];
                       
                        for (int i=0 ; i<lung ; i++){ //ogni riga di appoggio contiene un intero e un double separati da una ,
                                String[] dato = appoggio[i].split(",");
                                tempi[i] = Double.parseDouble(dato[0]); //converto stringa in double
                                valori[i] = Integer.parseInt(dato[1]); //converto stringa in int
                               
                        }
                        Toast.makeText(this, "Caricamento effettuato", Toast.LENGTH_SHORT).show();
                       
                }
                /*Gestione delle eccezioni*/
                catch (FileNotFoundException e) {
                        Toast.makeText(this, "Testo non trovato", Toast.LENGTH_LONG).show();
                } catch (IOException e) {
                        Log.e(filename, "Impossibile aprire il file", e);
                        Toast.makeText(this, "Errore", Toast.LENGTH_LONG).show();
                }  catch (NumberFormatException e) {
                        Toast.makeText(this, "Metodo di conversione stringa-numero invalido", Toast.LENGTH_LONG).show();
                } finally {
                        if (reader != null) {
                                try {
                                        reader.close();
                                } catch (Throwable t) {
                                }
                        }
                 else {
                        Toast.makeText(this, "Impossibile leggere la sd card", Toast.LENGTH_SHORT).show();
                     }
                }
        }



il logcat è questo:

Codice: [Seleziona]
09-18 08:32:01.010: D/dalvikvm(5575): GC_FOR_ALLOC freed 1074K, 29% free 3066K/4300K, paused 43ms, total 61ms
09-18 08:32:02.650: D/dalvikvm(5575): GC_FOR_ALLOC freed 415K, 29% free 3066K/4300K, paused 38ms, total 39ms
09-18 08:32:04.449: D/dalvikvm(5575): GC_FOR_ALLOC freed 405K, 27% free 3172K/4300K, paused 63ms, total 63ms
09-18 08:32:06.759: D/dalvikvm(5575): GC_FOR_ALLOC freed 416K, 24% free 3268K/4300K, paused 37ms, total 37ms
09-18 08:32:09.550: D/dalvikvm(5575): GC_FOR_ALLOC freed 41K, 14% free 3739K/4300K, paused 95ms, total 95ms
09-18 08:32:42.859: E/SoundPool(276): error loading /system/media/audio/ui/Effect_Tick.ogg
09-18 08:32:42.859: W/AudioService(276): Soundpool could not load file: /system/media/audio/ui/Effect_Tick.ogg
09-18 08:32:42.859: E/SoundPool(276): error loading /system/media/audio/ui/Effect_Tick.ogg
09-18 08:32:42.859: W/AudioService(276): Soundpool could not load file: /system/media/audio/ui/Effect_Tick.ogg
09-18 08:32:42.859: E/SoundPool(276): error loading /system/media/audio/ui/Effect_Tick.ogg
09-18 08:32:42.859: W/AudioService(276): Soundpool could not load file: /system/media/audio/ui/Effect_Tick.ogg
09-18 08:32:42.871: E/SoundPool(276): error loading /system/media/audio/ui/Effect_Tick.ogg
09-18 08:32:42.871: W/AudioService(276): Soundpool could not load file: /system/media/audio/ui/Effect_Tick.ogg
09-18 08:32:42.871: E/SoundPool(276): error loading /system/media/audio/ui/Effect_Tick.ogg
09-18 08:32:42.871: W/AudioService(276): Soundpool could not load file: /system/media/audio/ui/Effect_Tick.ogg
09-18 08:32:42.879: E/SoundPool(276): error loading /system/media/audio/ui/KeypressStandard.ogg
09-18 08:32:42.879: W/AudioService(276): Soundpool could not load file: /system/media/audio/ui/KeypressStandard.ogg
09-18 08:32:42.879: E/SoundPool(276): error loading /system/media/audio/ui/KeypressSpacebar.ogg
09-18 08:32:42.879: W/AudioService(276): Soundpool could not load file: /system/media/audio/ui/KeypressSpacebar.ogg
09-18 08:32:42.890: E/SoundPool(276): error loading /system/media/audio/ui/KeypressDelete.ogg
09-18 08:32:42.890: W/AudioService(276): Soundpool could not load file: /system/media/audio/ui/KeypressDelete.ogg
09-18 08:32:42.890: E/SoundPool(276): error loading /system/media/audio/ui/KeypressReturn.ogg
09-18 08:32:42.899: W/AudioService(276): Soundpool could not load file: /system/media/audio/ui/KeypressReturn.ogg
09-18 08:32:42.899: W/AudioService(276): onLoadSoundEffects(), Error -1 while loading samples
09-18 08:32:43.982: D/dalvikvm(5575): GC_FOR_ALLOC freed 1164K, 30% free 3087K/4408K, paused 41ms, total 55ms
09-18 08:32:46.441: D/dalvikvm(5575): GC_FOR_ALLOC freed 490K, 30% free 3109K/4408K, paused 38ms, total 40ms
09-18 08:32:48.340: D/dalvikvm(5575): GC_FOR_ALLOC freed 359K, 29% free 3172K/4408K, paused 41ms, total 41ms
09-18 08:32:48.340: I/dalvikvm-heap(5575): Grow heap (frag case) to 3.530MB for 294346-byte allocation
09-18 08:32:48.410: D/dalvikvm(5575): GC_FOR_ALLOC freed 191K, 31% free 3268K/4696K, paused 61ms, total 61ms
09-18 08:32:51.611: D/dalvikvm(5575): GC_FOR_ALLOC freed 143K, 23% free 3637K/4696K, paused 44ms, total 44ms
09-18 08:37:24.280: D/dalvikvm(395): GC_FOR_ALLOC freed 512K, 18% free 3039K/3704K, paused 93ms, total 93ms

Offline GabMarioPower

  • Moderatore globale
  • Utente senior
  • *****
  • Post: 606
  • Respect: +153
    • Github
    • Google+
    • gabrielemariotti
    • GabMarioPower
    • Mostra profilo
  • Play Store ID:
    GAB+MARIO+DEV
  • Sistema operativo:
    Ubuntu 14.04 , Win 10
Re:conversione string in int e double
« Risposta #1 il: 18 Settembre 2013, 15:16:32 CEST »
0
Nel logcat non c'è nulla.
Nel tuo codice scrivi il log quando intercetti l'eccezione pls.

Codice (Java): [Seleziona]
}  catch (NumberFormatException e) {
  //.....Log.e(....);

Offline Melanogaster

  • Utente normale
  • ***
  • Post: 260
  • Respect: +11
    • Mostra profilo
  • Dispositivo Android:
    SII
  • Sistema operativo:
    Kubuntu
Re:conversione string in int e double
« Risposta #2 il: 18 Settembre 2013, 15:27:11 CEST »
0
E se imposti:
Codice: [Seleziona]
tempi[i] = Double.parseDou le(dato[1]);
valori[i] = Integer.parseInt(dato[0]);
?

Offline Gazzerpiece

  • Nuovo arrivato
  • *
  • Post: 13
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    emulatore
  • Sistema operativo:
    Windows 7
Re:conversione string in int e double
« Risposta #3 il: 18 Settembre 2013, 15:48:48 CEST »
0
E se imposti:
Codice: [Seleziona]
tempi[i] = Double.parseDou le(dato[1]);
valori[i] = Integer.parseInt(dato[0]);
?

ho provato ma non funziona..comunque cosi dovrebbe andare bene visto come è fatto il mo file



Post unito: 18 Settembre 2013, 15:52:13 CEST
Nel logcat non c'è nulla.
Nel tuo codice scrivi il log quando intercetti l'eccezione pls.

Codice (Java): [Seleziona]
}  catch (NumberFormatException e) {
  //.....Log.e(....);


ho inseito il log come hai detto e mi è venuto questo ora nel LogCat

Codice: [Seleziona]
09-18 09:50:15.010: E/AccX.txt(20222): Metodo di conversione stringa-numero invalido
09-18 09:50:15.010: E/AccX.txt(20222): java.lang.NumberFormatException: Invalid int: " 19"
09-18 09:50:15.010: E/AccX.txt(20222):         at java.lang.Integer.invalidInt(Integer.java:138)
09-18 09:50:15.010: E/AccX.txt(20222):         at java.lang.Integer.parse(Integer.java:375)
09-18 09:50:15.010: E/AccX.txt(20222):         at java.lang.Integer.parseInt(Integer.java:366)
09-18 09:50:15.010: E/AccX.txt(20222):         at java.lang.Integer.parseInt(Integer.java:332)
09-18 09:50:15.010: E/AccX.txt(20222):         at progetto.progetto.MainActivity.Load(MainActivity.java:146)
09-18 09:50:15.010: E/AccX.txt(20222):         at progetto.progetto.MainActivity$1.onClick(MainActivity.java:74)
09-18 09:50:15.010: E/AccX.txt(20222):         at android.view.View.performClick(View.java:4240)
09-18 09:50:15.010: E/AccX.txt(20222):         at android.view.View$PerformClick.run(View.java:17721)
09-18 09:50:15.010: E/AccX.txt(20222):         at android.os.Handler.handleCallback(Handler.java:730)
09-18 09:50:15.010: E/AccX.txt(20222):         at android.os.Handler.dispatchMessage(Handler.java:92)
09-18 09:50:15.010: E/AccX.txt(20222):         at android.os.Looper.loop(Looper.java:137)
09-18 09:50:15.010: E/AccX.txt(20222):         at android.app.ActivityThread.main(ActivityThread.java:5103)
09-18 09:50:15.010: E/AccX.txt(20222):         at java.lang.reflect.Method.invokeNative(Native Method)
09-18 09:50:15.010: E/AccX.txt(20222):         at java.lang.reflect.Method.invoke(Method.java:525)
09-18 09:50:15.010: E/AccX.txt(20222):         at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:737)
09-18 09:50:15.010: E/AccX.txt(20222):         at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)
09-18 09:50:15.010: E/AccX.txt(20222):         at dalvik.system.NativeStart.main(Native Method)
09-18 09:50:15.050: I/AccX.txt(20222): Directory: /storage/sdcard
« Ultima modifica: 18 Settembre 2013, 15:52:13 CEST da Gazzerpiece, Reason: Merged DoublePost »

Offline crbin1

  • Utente junior
  • **
  • Post: 61
  • Respect: +6
    • labeltodo
    • Mostra profilo
    • Do Androids Dream of Electric Sheep?
  • Dispositivo Android:
    Galaxy Nexus
Re:conversione string in int e double
« Risposta #4 il: 18 Settembre 2013, 15:58:45 CEST »
+1
L'errore è:
Citazione
java.lang.NumberFormatException: Invalid int: " 19"

è quello spazio prima del numero a generare l'errore perché così non è un int, o mogliori la funzione per estrarre i numeri o se il problema sono solo gli spazi fai un trim alla stringa prima di convertirla

Offline Gazzerpiece

  • Nuovo arrivato
  • *
  • Post: 13
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    emulatore
  • Sistema operativo:
    Windows 7
Re:conversione string in int e double
« Risposta #5 il: 18 Settembre 2013, 16:14:39 CEST »
0
 si era lo spazio.. :-[

con trim() funziona benissimo!

 grazie mille

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:conversione string in int e double
« Risposta #6 il: 18 Settembre 2013, 16:17:27 CEST »
0
In generale, per evitare sorprese presenti e future, gestisci l'eccezione della conversione in double immediatamente, qualcosa tipo:

Codice (Java): [Seleziona]
try {
    tempi[i] = Double.parseDouble(dato[0]);
}  catch (NumberFormatException e) {
    tempi[i] = 0.0;
}
NON rispondo a domande nei messaggi privati
Bradipao @ Play Store