Autore Topic: Recuperare un valore numerico  (Letto 1353 volte)

Offline tonyontravel

  • Nuovo arrivato
  • *
  • Post: 36
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Samsung Galaxi Next
  • Sistema operativo:
    Windows XP
Recuperare un valore numerico
« il: 18 Gennaio 2012, 11:55:51 CET »
0
Scusate la domanda stupida ma,
se uso la findViewById per recuperare il valore inserito in una EditText di tipo text, come faccio a recuperare il valore se la EditText è di tipo number? (Cannot cast from View to int)

Grazie
Claudio

Offline Bito92

  • Utente junior
  • **
  • Post: 51
  • Respect: +7
    • Mostra profilo
Re:Recuperare un valore numerico
« Risposta #1 il: 18 Gennaio 2012, 12:02:01 CET »
0
per recuperare il valore dall'edittext usi: edittext.getText().toString(); e per convertirlo in un integer fai:
Integer.parseInt(stringa).

 :-)

Offline tonyontravel

  • Nuovo arrivato
  • *
  • Post: 36
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Samsung Galaxi Next
  • Sistema operativo:
    Windows XP
Re:Recuperare un valore numerico
« Risposta #2 il: 18 Gennaio 2012, 12:39:36 CET »
0
Grazie  :-P

Offline tonyontravel

  • Nuovo arrivato
  • *
  • Post: 36
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Samsung Galaxi Next
  • Sistema operativo:
    Windows XP
Re:Recuperare un valore numerico
« Risposta #3 il: 18 Gennaio 2012, 16:14:43 CET »
0
Credevo di aver risolto, ma non è così.

Citazione
int sqlTessera;

EditText Tessera = (EditText) findViewById(R.id.etTessera);
String sTessera = Tessera.getText().toString();
sqlTessera = Integer.parseInt(sTessera);

pur non segnalando alcun errore mi fa sempre crashare l'app
LogCat:
FATAL EXCEPTION: main




Please help me.

Offline Bito92

  • Utente junior
  • **
  • Post: 51
  • Respect: +7
    • Mostra profilo
Re:Recuperare un valore numerico
« Risposta #4 il: 18 Gennaio 2012, 16:19:50 CET »
0
puoi postare tutto il logcat di errore cosi si capisce meglio.. :-)

Offline tonyontravel

  • Nuovo arrivato
  • *
  • Post: 36
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Samsung Galaxi Next
  • Sistema operativo:
    Windows XP
Re:Recuperare un valore numerico
« Risposta #5 il: 18 Gennaio 2012, 16:25:06 CET »
0
Codice: [Seleziona]
01-18 15:13:54.698: E/AndroidRuntime(585): FATAL EXCEPTION: main
01-18 15:13:54.698: E/AndroidRuntime(585): java.lang.RuntimeException: Unable to start activity ComponentInfo{it.nextgolf.rts/it.nextgolf.rts.insGiocatori}: java.lang.NumberFormatException: unable to parse '' as integer
01-18 15:13:54.698: E/AndroidRuntime(585):         at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2663)
01-18 15:13:54.698: E/AndroidRuntime(585):         at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2679)
01-18 15:13:54.698: E/AndroidRuntime(585):         at android.app.ActivityThread.access$2300(ActivityThread.java:125)
01-18 15:13:54.698: E/AndroidRuntime(585):         at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2033)
01-18 15:13:54.698: E/AndroidRuntime(585):         at android.os.Handler.dispatchMessage(Handler.java:99)
01-18 15:13:54.698: E/AndroidRuntime(585):         at android.os.Looper.loop(Looper.java:123)
01-18 15:13:54.698: E/AndroidRuntime(585):         at android.app.ActivityThread.main(ActivityThread.java:4627)
01-18 15:13:54.698: E/AndroidRuntime(585):         at java.lang.reflect.Method.invokeNative(Native Method)
01-18 15:13:54.698: E/AndroidRuntime(585):         at java.lang.reflect.Method.invoke(Method.java:521)
01-18 15:13:54.698: E/AndroidRuntime(585):         at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868)
01-18 15:13:54.698: E/AndroidRuntime(585):         at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)
01-18 15:13:54.698: E/AndroidRuntime(585):         at dalvik.system.NativeStart.main(Native Method)
01-18 15:13:54.698: E/AndroidRuntime(585): Caused by: java.lang.NumberFormatException: unable to parse '' as integer
01-18 15:13:54.698: E/AndroidRuntime(585):         at java.lang.Integer.parseInt(Integer.java:412)
01-18 15:13:54.698: E/AndroidRuntime(585):         at java.lang.Integer.parseInt(Integer.java:382)
01-18 15:13:54.698: E/AndroidRuntime(585):         at it.nextgolf.rts.insGiocatori.onCreate(insGiocatori.java:29)
01-18 15:13:54.698: E/AndroidRuntime(585):         at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
01-18 15:13:54.698: E/AndroidRuntime(585):         at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2627)
01-18 15:13:54.698: E/AndroidRuntime(585):         ... 11 more

per vedere il codice completo (layout, java) l'ho pbblicato per un altro problema qui:

Errore su db.insert - Android Developers Italia
« Ultima modifica: 18 Gennaio 2012, 16:45:12 CET da tonyontravel »

Offline Ricky`

  • Amministratore
  • Utente storico
  • *****
  • Post: 3487
  • Respect: +506
    • Github
    • Google+
    • rciovati
    • Mostra profilo
Re:Recuperare un valore numerico
« Risposta #6 il: 18 Gennaio 2012, 16:31:29 CET »
0
Usa i tasti code non quello per quotare.

Offline Bito92

  • Utente junior
  • **
  • Post: 51
  • Respect: +7
    • Mostra profilo
Re:Recuperare un valore numerico
« Risposta #7 il: 18 Gennaio 2012, 16:47:50 CET »
0
prova con questo pezzo di codice che ho utilizzato per la conversione in un intero:

Funzione statica per controllare se è un Intero:
Codice (Java): [Seleziona]
        public static boolean isIntNumber(String num){
        if (num.length() <= 0) {
                return false;
        }
       
        for (int i = 0; i < num.length(); i++) {
            if (!Character.isDigit(num.charAt(i))){
                return false;
            }
        }
        return true;
    }

poi sotto onCreate ho fatto:

Codice (Java): [Seleziona]
int km          = (utils.isIntNumber(kmperc.getText().toString())) ? Integer.parseInt(kmperc.getText().toString()) : 0;
spero ti sia di auito questo pezzo di codice  :-)

Offline tonyontravel

  • Nuovo arrivato
  • *
  • Post: 36
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Samsung Galaxi Next
  • Sistema operativo:
    Windows XP
Re:Recuperare un valore numerico
« Risposta #8 il: 18 Gennaio 2012, 16:48:47 CET »
0
Usa i tasti code non quello per quotare.

Ho rettificato, grazie.

Offline Ricky`

  • Amministratore
  • Utente storico
  • *****
  • Post: 3487
  • Respect: +506
    • Github
    • Google+
    • rciovati
    • Mostra profilo
Re:Recuperare un valore numerico
« Risposta #9 il: 18 Gennaio 2012, 16:52:18 CET »
0

Offline tonyontravel

  • Nuovo arrivato
  • *
  • Post: 36
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Samsung Galaxi Next
  • Sistema operativo:
    Windows XP
Re:Recuperare un valore numerico
« Risposta #10 il: 18 Gennaio 2012, 17:46:14 CET »
0
Grazie a Bito, ma la sua soluzione mi sembra un tantino complessa e macchinosa da applicare ad ogni valore numerico.

Possibile che per usare, trattare degli input numerici non ci sia una soluzione più facile?

Come mai Eclipse non segnala alcuna anomalia nel codice e poi l'emulatore invece crasha?

Purtroppo sono bloccato qui, spero che qualche guru mi possa dare una mano.

Grazie

Offline Ricky`

  • Amministratore
  • Utente storico
  • *****
  • Post: 3487
  • Respect: +506
    • Github
    • Google+
    • rciovati
    • Mostra profilo
Re:Recuperare un valore numerico
« Risposta #11 il: 18 Gennaio 2012, 17:58:31 CET »
+1
Come mai Eclipse non segnala alcuna anomalia nel codice e poi l'emulatore invece crasha?

Crasha perchè vai a fare il la conversione di una stringa vuota.
Oltre al metodo proposta da Bito potresti usare le classi proposte da android

Codice (Java): [Seleziona]
EditText Tessera = (EditText) findViewById(R.id.etTessera);
String sTessera = Tessera.getText().toString();
if(!TextUtils.isEmpty(sTessera) && TextUtils.isDigitsOnly(sTessera))
sqlTessera = Integer.parseInt(sTessera);

Ma alla fine è la stessa cosa...

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:Recuperare un valore numerico
« Risposta #12 il: 18 Gennaio 2012, 18:08:42 CET »
+1
Grazie a Bito, ma la sua soluzione mi sembra un tantino complessa e macchinosa da applicare ad ogni valore numerico.

Possibile che per usare, trattare degli input numerici non ci sia una soluzione più facile?

Un minimo di "data validation" per i campi dei form ci vuole sempre.

Nel tuo caso, visto che hai già imposto inputType=number, potrebbe bastarti controllare che la lunghezza della stringa sia maggiore di zero.

Se proprio vuoi una soluzione che senza if e che evita il crash (pur restituendo zero), scrivila così:
Codice (Java): [Seleziona]
sqlTessera = Integer.parseInt("0"+sTessera);
Come mai Eclipse non segnala alcuna anomalia nel codice e poi l'emulatore invece crasha?

Il codice è sintatticamente corretto, il problema è che la edittext può assumere un contenuto che non è ammesso dalla parse e quindi genera una eccezione non gestita dal codice.
NON rispondo a domande nei messaggi privati
Bradipao @ Play Store

Offline tonyontravel

  • Nuovo arrivato
  • *
  • Post: 36
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Samsung Galaxi Next
  • Sistema operativo:
    Windows XP
Re:Recuperare un valore numerico
« Risposta #13 il: 18 Gennaio 2012, 18:15:43 CET »
0
Un minimo di "data validation" per i campi dei form ci vuole sempre.

Nel tuo caso, visto che hai già imposto inputType=number, potrebbe bastarti controllare che la lunghezza della stringa sia maggiore di zero.

Se proprio vuoi una soluzione che senza if e che evita il crash (pur restituendo zero), scrivila così:
Codice (Java): [Seleziona]
sqlTessera = Integer.parseInt("0"+sTessera);
Il codice è sintatticamente corretto, il problema è che la edittext può assumere un contenuto che non è ammesso dalla parse e quindi genera una eccezione non gestita dal codice.


Yeeeeessssssssssssssssssss !!!

Grazie mille Bradipao ora torno sull'altra sezione a vedere di risolvere il problema della insertDb.


Offline tonyontravel

  • Nuovo arrivato
  • *
  • Post: 36
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Samsung Galaxi Next
  • Sistema operativo:
    Windows XP
Re:Recuperare un valore numerico
« Risposta #14 il: 18 Gennaio 2012, 18:46:56 CET »
0
Crasha perchè vai a fare il la conversione di una stringa vuota.
Oltre al metodo proposta da Bito potresti usare le classi proposte da android

Codice (Java): [Seleziona]
EditText Tessera = (EditText) findViewById(R.id.etTessera);
String sTessera = Tessera.getText().toString();
if(!TextUtils.isEmpty(sTessera) && TextUtils.isDigitsOnly(sTessera))
sqlTessera = Integer.parseInt(sTessera);

Ma alla fine è la stessa cosa...


Scusa Ricky mi era sfuggita la tua risposta, proverò anche quella.

Grazie anche a te.