Android NumberFormatException

Android NumberFormatException
2012-03-08T18:41:18+01:00
2012-03-09T13:48:47+01:00
2022-11-24T23:41:53+01:00
J0hNy
Sziaszok,

egy ilyen kérés/kérdéssel fordulok hozzatok. Mai nap folyaman nekialltam, hogy kiprobaljam a programot amit keszitettem élesben, Android mobilon. (Eddig csak Eclipse emulatorban probaltam.) El is indul minden fasza, viszont amint elér ehhez a részhez

System.out.println("Simulation starts..."); while((time1 = in.readDouble()) != -1.0) { String str1 = in.readUTF(); String format = "##0.##"; NumberFormat nf = new DecimalFormat(format); StringTokenizer strTok = new StringTokenizer(str1); hodnotaTime = Double.parseDouble(strTok.nextToken()); hodnotaOutput = Double.parseDouble(strTok.nextToken()); hodnotaAction = Double.parseDouble(strTok.nextToken()); hodnotaInput = Double.parseDouble(strTok.nextToken()); t.add(new Double(nf.format(hodnotaTime))); y.add(new Double(nf.format(hodnotaOutput))); u.add(new Double(nf.format(hodnotaAction))); w.add(new Double(nf.format(hodnotaInput))); }
, legalabbis gondolom hogy ezzel van baja, mivelhogy a Simulation starts uzenetet kiirja, NumberFormatExceptiont kapok.

03-08 18:23:42.449: W/dalvikvm(1810): threadid=1: thread exiting with uncaught exception (group=0x40018578)
03-08 18:23:42.459: E/AndroidRuntime(1810): FATAL EXCEPTION: main
03-08 18:23:42.459: E/AndroidRuntime(1810): java.lang.NumberFormatException
03-08 18:23:42.459: E/AndroidRuntime(1810): at org.apache.harmony.luni.util.FloatingPointParser.parseDblImpl(Native Method)
03-08 18:23:42.459: E/AndroidRuntime(1810): at org.apache.harmony.luni.util.FloatingPointParser.parseDouble(FloatingPointParser.java:283)
03-08 18:23:42.459: E/AndroidRuntime(1810): at java.lang.Double.parseDouble(Double.java:318)
03-08 18:23:42.459: E/AndroidRuntime(1810): at java.lang.Double.<init>(Double.java:137)
03-08 18:23:42.459: E/AndroidRuntime(1810): at com.pck.dp.SimulateActivity$1.onClick(SimulateActivity.java:196)
03-08 18:23:42.459: E/AndroidRuntime(1810): at android.view.View.performClick(View.java:2485)
03-08 18:23:42.459: E/AndroidRuntime(1810): at android.view.View$PerformClick.run(View.java:9080)
03-08 18:23:42.459: E/AndroidRuntime(1810): at android.os.Handler.handleCallback(Handler.java:587)
03-08 18:23:42.459: E/AndroidRuntime(1810): at android.os.Handler.dispatchMessage(Handler.java:92)
03-08 18:23:42.459: E/AndroidRuntime(1810): at android.os.Looper.loop(Looper.java:123)
03-08 18:23:42.459: E/AndroidRuntime(1810): at android.app.ActivityThread.main(ActivityThread.java:3687)
03-08 18:23:42.459: E/AndroidRuntime(1810): at java.lang.reflect.Method.invokeNative(Native Method)
03-08 18:23:42.459: E/AndroidRuntime(1810): at java.lang.reflect.Method.invoke(Method.java:507)
03-08 18:23:42.459: E/AndroidRuntime(1810): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:867)
03-08 18:23:42.459: E/AndroidRuntime(1810): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:625)
03-08 18:23:42.459: E/AndroidRuntime(1810): at dalvik.system.NativeStart.main(Native Method)


Ha a parsedouble-s sorokat try-catch koze rakom, akkoris ugyanez a hiba jelentkezik :/

try { hodnotaTime = Double.parseDouble(strTok.nextToken()); } catch (NumberFormatException e) { System.out.println("Itt a hiba, time " + e); } try { hodnotaOutput = Double.parseDouble(strTok.nextToken()); } catch (NumberFormatException e) { System.out.println("Itt a hiba, output " + e); } try { hodnotaAction = Double.parseDouble(strTok.nextToken()); } catch (NumberFormatException e) { System.out.println("Itt a hiba, action " + e); } try { hodnotaInput = Double.parseDouble(strTok.nextToken()); } catch (NumberFormatException e) { System.out.println("Itt a hiba, input " + e); }

Valakinek valami otlet? Elore is koszi.
Mutasd a teljes hozzászólást!
NumberFormat nf = NumberFormat.getInstance(Locale.US);
Mutasd a teljes hozzászólást!

  • Ellenőrizd az adott token stringjét, valoszínűleg ezt nem tudja parsolni.
    Mutasd a teljes hozzászólást!
  • Ha a parsedouble-s sorokat try-catch koze rakom, akkoris ugyanez a hiba jelentkezik :/



    Mert nem a parseDouble-s sorokbol dobodik:


    03-08 18:23:42.459: E/AndroidRuntime(1810): at java.lang.Double.<init>(Double.java:137) 03-08 18:23:42.459: E/AndroidRuntime(1810): at com.pck.dp.SimulateActivity$1.onClick(SimulateActivity.java:196)
    Mutasd a teljes hozzászólást!
  • sajnos elvitték a mobilt amin probaltam (Samsung Galaxy One), ugyhogy nemtudom ujra lefutattni rajta. viszont dobtam fel androidot a HTC Touch HD-mra es azon gond nelkul lefut. a programmal nem csinaltam vele semmit.. wtf :/
    Mutasd a teljes hozzászólást!
  • Ha a lokalizáció miatt a szám formátuma tizedes pont helyett tizedes vessző szerint kerül szöveg típusú változóba majd onnan kell szám típussá alakítani az létrehozhat hasonló anomáliát. Ez megmagyarázná az eltérő viselkedést a különböző eszközökön.
    Tipp:
    Próbáld meg átállítani a területi beállításokat a telefonon és úgy tesztelni.

    Mutasd a teljes hozzászólást!
  • Igazad van, ha német,cseh... nyelvre van állítva akkor jelentkezik a hiba. Ha angolra akkor nincs semmi gond vele.

    Konkretan a kover betus sorral van baja:

    hodnotaTime = Double.parseDouble(strTok.nextToken()); hodnotaOutput = Double.parseDouble(strTok.nextToken()); hodnotaAction = Double.parseDouble(strTok.nextToken()); hodnotaInput = Double.parseDouble(strTok.nextToken()); t.add(new Double(nf.format(hodnotaTime))); y.add(new Double(nf.format(hodnotaOutput)));
    u.add(new Double(nf.format(hodnotaAction)));
    w.add(new Double(nf.format(hodnotaInput)));

    Az érték pedig amiket a valtozok tartalmaznak:
    0.0
    0.0
    1.155
    5.0

    Nem ertem mi vele a baja.

    Ha angolra allitom es ugy futtatom akkoris ugyanezek az ertekek vannak a valtozokban es gond nelkul lefut.
    Mutasd a teljes hozzászólást!
  • u.add(new Double(nf.format(hodnotaAction)));
    Ebben a formában a new Double olyan String értéket kaphat a formattertől ami tartalmazhat vesszőt vagy olyan formázó karaktereket mint a szóköz is ezt pedig a Double típus számára érvénytelen erték.
    Mutasd a teljes hozzászólást!
  • Helló!

    .NET alatt szám konvertálásakor emiatt kell használni az
    InvariantCulture
    opciót.

    Java alatt nincs ilyen, de ez lehet a megoldás:

    .Net CultureInfo.InvariantCulture in Java

    Ez visszaadja az aktuális szám formátumot, így már tudsz parse-olni.
    Mutasd a teljes hozzászólást!
  • NumberFormat nf = NumberFormat.getInstance(Locale.US);
    Mutasd a teljes hozzászólást!
  • hodnotaTime = (double)(int)((Double.parseDouble(strTok.nextToken())+0.005)*100.0)/100.0; //System.out.println(hodnotaTime); hodnotaOutput = (double)(int)((Double.parseDouble(strTok.nextToken())+0.005)*100.0)/100.0; //System.out.println(hodnotaOutput); hodnotaAction = (double)(int)((Double.parseDouble(strTok.nextToken())+0.005)*100.0)/100.0; //System.out.println(hodnotaAction); hodnotaInput = (double)(int)((Double.parseDouble(strTok.nextToken())+0.005)*100.0)/100.0; //System.out.println(hodnotaInput); t.add(new Double(hodnotaTime)); y.add(new Double(hodnotaOutput)); u.add(new Double(hodnotaAction)); w.add(new Double(hodnotaInput));

    Egyenlore nincs jobb otletem mit kéne hogy csinaljak azzal a NumberFormattal.
    Ezzel mukodik, bár nem mindenhol kerekít tokeletesen.
    Mutasd a teljes hozzászólást!
  • String format = "##0.##"; Locale.setDefault(Locale.US); DecimalFormat nf = new DecimalFormat(format);

    Így mostmár jo, koszonom mindnekinek a segítséget.
    Mutasd a teljes hozzászólást!
  • Hát pl. ehelyett

    hodnotaTime = Double.parseDouble(strTok.nextToken());

    próbáld ezt:

    hodnotaTime = NumberFormat.getNumberInstance().parse(strTok.nextToken());
    Mutasd a teljes hozzászólást!
  • try { hodnotaTime = (Double) NumberFormat.getNumberInstance().parse(strTok.nextToken()); hodnotaOutput = (Double) NumberFormat.getNumberInstance().parse(strTok.nextToken()); hodnotaAction = (Double) NumberFormat.getNumberInstance().parse(strTok.nextToken()); hodnotaInput = (Double) NumberFormat.getNumberInstance().parse(strTok.nextToken()); } catch (ParseException e) { e.printStackTrace(); }

    Ezzel java.lang.ClassCastException errort kapok.
    Mutasd a teljes hozzászólást!
Tetszett amit olvastál? Szeretnél a jövőben is értesülni a hasonló érdekességekről?
abcd