2011-01-15 3 views
9

En essayant de comparer les valeurs de deux boîtes edittext. Ce que je voudrais, c'est comparer simplement passw1 = passw2. Comme mon code compare maintenant deux chaînes, je suis entré car je ne pouvais pas les comparer.Comparaison de chaînes en Java

final EditText passw1= (EditText) findViewById(R.id.passw1); 
final EditText passw2= (EditText) findViewById(R.id.passw2); 
Button buttoks = (Button) findViewById(R.id.Ok); 
     buttoks.setOnClickListener(new OnClickListener() {  

    public void onClick(View v) {  

    if (passw1.toString().equalsIgnoreCase("1234") && passw2.toString().equalsIgnoreCase("1234")){ 
     Toast.makeText(getApplication(),"Username and password match", Toast.LENGTH_SHORT).show(); 
     } 
    else { 
     Toast.makeText(getApplication(),"Username and password doesn't match", Toast.LENGTH_SHORT).show(); 
     } 
    } }); 

Répondre

16

[EDIT] je fait une erreur plus tôt, parce que, pour obtenir le texte, vous devez utiliser .getText(). ToString().

Voici un exemple de travail complet:

package com.psegina.passwordTest01; 

import android.app.Activity; 
import android.os.Bundle; 
import android.view.View; 
import android.view.View.OnClickListener; 
import android.widget.Button; 
import android.widget.EditText; 
import android.widget.LinearLayout; 
import android.widget.Toast; 

public class Main extends Activity implements OnClickListener { 
    LinearLayout l; 
    EditText user; 
    EditText pwd; 
    Button btn; 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 

     l = new LinearLayout(this); 
     user = new EditText(this); 
     pwd = new EditText(this); 
     btn = new Button(this); 

     l.addView(user); 
     l.addView(pwd); 
     l.addView(btn); 
     btn.setOnClickListener(this); 

     setContentView(l); 
    } 

    public void onClick(View v){ 
     String u = user.getText().toString(); 
     String p = pwd.getText().toString(); 
     if(u.equals(p)) 
      Toast.makeText(getApplicationContext(), "Matches", Toast.LENGTH_SHORT).show(); 
     else 
      Toast.makeText(getApplicationContext(), user.getText()+" != "+pwd.getText(), Toast.LENGTH_SHORT).show(); 
    } 
} 

réponse originale (Ne fonctionne pas à cause du manque de toString())

Essayez d'utiliser .getText() au lieu de .toString().

if(passw1.getText() == passw2.getText()) 
#do something 

.toString() retourne une représentation de chaîne de l'objet entier, ce qui signifie qu'il ne retournera pas le texte que vous avez entré dans le champ (voir par vous-même en ajoutant un Toast qui montrera la sortie de .toString ())

+0

j'ai essayé cela, mais tout ce que je reçois est qu'ils ne correspondent même pas quand ils sont – M2Gd

+0

Pouvez-vous poster le bloc de code avec getText() et la sortie de Log.d ("test", passw1.getText()) et Log.d ("test", passw2.getText())? – mrPjer

+0

, vous pouvez également les opérations suivantes: if (. (Passw1.getText()) est égal à (passw2.getText())) publique vide onClick – mrPjer

32

L'utilisation de l'opérateur == compare les références aux chaînes et non à la chaîne elle-même.

Ok, vous devez toString() le modifiable. J'ai chargé une partie du code que j'avais auparavant qui traitait de cette situation.

String passwd1Text = passw1.getText().toString(); 
String passwd2Text = passw2.getText().toString(); 

if (passwd1Text.equals(passwd2Text)) 
{ 
} 
+0

j'ai essayé cela et j'ai encore d'autres msg venir quand ils correspondent – M2Gd

2

Vous avez besoin à la fois getText() - qui renvoie un éditable et toString() - pour convertir en une chaîne pour la correspondance. Donc, au lieu de: passw1.toString().equalsIgnoreCase("1234") vous avez besoin de passw1.getText().toString().equalsIgnoreCase("1234").

3

Vous pouvez comparer les valeurs à l'aide equals() de Java:

public void onClick(View v) { 
    // TODO Auto-generated method stub 

    s1=text1.getText().toString(); 
    s2=text2.getText().toString(); 

    if(s1.equals(s2)) 
     Show.setText("Are Equal"); 
    else 
     Show.setText("Not Equal"); 
} 
1

ous pouvez utiliser String.compareTo (String) qui retourne un entier qui est négatif (<), zéro (=) ou positif (>).

Utilisez si:

Vous pouvez utiliser String.compareTo (String) qui retourne un entier qui est négatif (<), zéro (=) ou positif (>).

Utilisez donc:

String a="myWord"; 
    if(a.compareTo(another_string) <0){ 
    //a is strictly < to another_string 
    } 
    else if (a.compareTo(another_string) == 0){ 
    //a equals to another_string 
    } 
else{ 
    // a is strictly > than another_string 
}  
0

Essayez d'utiliser .trim() d'abord, avant .equals(), ou créer une nouvelle chaîne var qui a ces choses.

5

En fonction onclik remplacer la première ligne avec cette ligne vous obtiendrez certainement le bon résultat.

si (passw1.getText(). ToString(). EqualsIgnoreCase ("1234") & & passw2.getText() toString()..equalsIgnoreCase (« 1234 »)) {

0

a fait la même chose ici nécessaire pour montrer « succès » deux fois réponse est données de PHP

String res=response.toString().trim; 

          Toast.makeText(sign_in.this,res,Toast.LENGTH_SHORT).show(); 
    if (res.compareTo("success")==0){ 
    Toast.makeText(this,res,Toast.LENGTH_SHORT).show(); 
    } 
+0

Ce n'est pas une bonne réponse à la question – poohdedoo

+0

essayer ** string res = response.toString(). Trim() ** –