CERCA
PER MODELLO
FullScreen Chatbox! :)

Utente del giorno: Q.dino con ben 1 Thanks ricevuti nelle ultime 24 ore
Utente della settimana: 9mm con ben 9 Thanks ricevuti negli ultimi sette giorni
Utente del mese: 9mm con ben 32 Thanks ricevuti nell'ultimo mese

Visualizzazione dei risultati da 1 a 5 su 5
Discussione:

boolean e equals - ritorna sempre false

Se questa discussione ti è stata utile, ti preghiamo di lasciare un messaggio di feedback in modo che possa essere preziosa in futuro anche per altri utenti come te!
  1. #1
    Baby Droid


    Registrato dal
    Jul 2012
    Messaggi
    4
    Smartphone
    Samsung Galaxy S plus

    Ringraziamenti
    1
    Ringraziato 0 volte in 0 Posts
    Predefinito

    boolean e equals - ritorna sempre false

    Sto imparando adesso a programmare app per android, quindi stavo leggendo vari tutorial e cercavo di capirne il codice.

    Leggendo questo codice pensavo di aver capito che alla pressione del tasto invio, in caso il nome sia uguale alla password il valore di ritorno fosse true... quindi visualizzasse il toast "Login effettuato" mentre in caso fossero diversi il valore di ritorno sarebbe false e quindi visualizza il toast "Login errato"...

    Testando l'applicazione il toast visualizzato è sempre quello con scritto "Login errato". Cosa non ho capito? dove sbaglio?

    Main Activity:

    codice:
    package it.devapp.views;
    
    import android.app.Activity;
    import android.os.Bundle;
    import android.view.View;
    import android.widget.CheckBox;
    import android.widget.EditText;
    import android.widget.Toast;
    
    public class MainActivity extends Activity
    {
    	private EditText userName;
    
    	private EditText password;
    
    	private CheckBox restaConnesso;
    
    
    	public void onCreate(Bundle savedInstanceState)
    	{
    		super.onCreate(savedInstanceState);
    		setContentView(R.layout.main);
    		userName = (EditText) findViewById(R.id.user_name);
    		password = (EditText) findViewById(R.id.password);
    		restaConnesso = (CheckBox) findViewById(R.id.resta_connesso);
    	}
    
    	public void invia(View v)
    	{	
    		if (isLoginCorretto(userName.getText(), password.getText())) 
    		
    		{	
    			Toast.makeText(this, "Login effettuato", Toast.LENGTH_LONG).show();
    		}
    		else
    		{	
    			Toast.makeText(this, "Login errato", Toast.LENGTH_LONG).show();
    		}
    	}
    
    	public void reset(View v)
    	{
    		userName.setText("");
    		password.setText("");
    		restaConnesso.setChecked(false);
    	}
    
    	private boolean isLoginCorretto(CharSequence nome, CharSequence password)
    	{
    		return nome.equals(password);
    	}
    }

  2.  
  3. #2
    Androidiano


    Registrato dal
    Oct 2010
    Messaggi
    229

    Ringraziamenti
    27
    Ringraziato 77 volte in 35 Posts
    Predefinito

    Ciao, come trovi sulla documentazione java, CharSequence non ridefinisce la funzione equals quindi il risultato è impredicibile (e comunque non quello che vorremmo, ovvero il confronto fra le due stringhe).
    CharSequence (Java 2 Platform SE 5.0)

    In compenso come puoi leggere dal link, il toString() è implementato generando un oggetto String, ed in questo l'equals funziona come ti aspetti tu, quindi nome.toString().equals(password.toString()) dovrebbe risolvere.

    ciao
    Felice possessore di un LG O1 con GingerLOL 1.5.2 e di un Mediacom Smartpad 810c con Pistoneone 4.2.1 / 5.0 Samsung Galaxy Tab 10.1 P7510 (originale per ora) Mediacom Smartpad 715i (ROM smartpao 2.1), Mediacom Smartpad 842i (ROM smartpao 2.0)
    Mini-Forum-FAQ per Mediacom Smartpad 810c

  4. #3
    Baby Droid


    Registrato dal
    Jul 2012
    Messaggi
    4
    Smartphone
    Samsung Galaxy S plus

    Ringraziamenti
    1
    Ringraziato 0 volte in 0 Posts
    Predefinito

    Mi scuso prima di tutto per come ho posto la domanda (l'italiano lasciava molto a desiderare) ma come sempre andavo di fretta... Ho risolto aggiungendo .tostring() dopo il gettext() di nome e password e funziona ora provo anche come mi hai suggerito te... Ci sarebbe il vantaggio di scrivere leggermente meno codice :-)


    Inviato dal mio GT-I9001

  5. #4
    Androidiano


    Registrato dal
    Oct 2010
    Messaggi
    229

    Ringraziamenti
    27
    Ringraziato 77 volte in 35 Posts
    Predefinito

    Non ti preoccupare, l'importante secondo me è che tu capisca perchè funziona, nella soluzione tua ad esempio funziona perchè tu passi alla funzione non più due CharSequence ma due String. Puoi farlo in quanto String discende da CharSequence, e quando richiama l'equals usa quello della classe String.
    In pratica sia la mia soluzione che la tua eseguono la medesima funzione equals (quella di String).
    Fare il toString() dentro alla funzione però fa si che da qualunque chiamata il confronto venga fatto sui due CharSequence una volta convertiti in stringa, fare il toString() alla chiamata della funzione invece demanda la decisione di confrontare i CharSequence o gli String a chi effettua la chiamata.

    (Scusami se sembro pedante, ma trovo interessante valutare e discutere di queste cose e che chi chiede non tanto risolva il problema in se ma capisca cosa ha fatto e perchè funziona, è un po' come la storia del dare un pesce o insegnare a pescare )
    P.S. vale anche quando chiedo io .. non solo quando rispondo
    Felice possessore di un LG O1 con GingerLOL 1.5.2 e di un Mediacom Smartpad 810c con Pistoneone 4.2.1 / 5.0 Samsung Galaxy Tab 10.1 P7510 (originale per ora) Mediacom Smartpad 715i (ROM smartpao 2.1), Mediacom Smartpad 842i (ROM smartpao 2.0)
    Mini-Forum-FAQ per Mediacom Smartpad 810c

  6. Il seguente Utente ha ringraziato pourquoipas per il post:

    Danixi (22-07-12)

  7. #5
    Baby Droid


    Registrato dal
    Jul 2012
    Messaggi
    4
    Smartphone
    Samsung Galaxy S plus

    Ringraziamenti
    1
    Ringraziato 0 volte in 0 Posts
    Predefinito

    Mi trovi pienamente d'accordo, mi fa piacere aver trovato una risposta di questo tipo.

    E' perfettamente chiara la spiegazione della gestione del toString dentro o fuori alla funzione, in quanto riesco ad associarla a medesime gestioni effettuate con altri linguaggi di programmazione.

    Quello che adesso voglio approfondire è l'oggetto CharSequence che al momento credo di non aver ben compreso (pensvo fosse equivalente a String).

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire risposte
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Torna su
Privacy Policy