2011-01-15 13 views
9

Estoy tratando de comparar los valores de dos cuadros de texto de edición. Lo que me gustaría es simplemente comparar passw1 = passw2. Como mi código ahora está comparando dos cadenas que he ingresado ya que no pude compararlas.Comparación de cadenas 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(); 
     } 
    } }); 

Respuesta

16

[EDIT] he cometido un error anterior, debido a que, para obtener el texto, es necesario utilizar .getText(). ToString().

Aquí es un ejemplo de trabajo completo:

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(); 
    } 
} 

Respuesta original (no funcionará debido a la falta de toString())

Trate de usar .getText() en lugar de .toString().

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

.toString() devuelve una representación de cadena del objeto completo, lo que significa que no devolverá el texto que ha introducido en el campo (ver por sí mismo mediante la adición de un pan tostado que mostrará la salida de .toString ())

+0

he intentado esto, pero lo único que consigue es que no coinciden incluso cuando son – M2Gd

+0

¿Se puede publicar el bloque de código con getText() y el resultado de Log.d ("test", passw1.getText()) y Log.d ("test", passw2.getText())? – mrPjer

+0

Además, puede intentar lo siguiente: if (. (Passw1.getText()) es igual a (passw2.getText())) – mrPjer

32

Al usar el operador == se compararán las referencias a las cadenas, no las cadenas mismas.

Ok, tienes que toString() el Editable. Cargué parte del código que tenía antes que trataba sobre esta situación.

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

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

intenté eso y todavía tengo más msg cuando coinciden – M2Gd

2

Se necesitan las dos getText() - que devuelve un editable y toString() - para convertir eso a una cadena para la detección. Entonces, en lugar de: passw1.toString().equalsIgnoreCase("1234") necesita passw1.getText().toString().equalsIgnoreCase("1234").

3

Puede comparar los valores con 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

ou puede utilizar String.compareTo (String) que devuelve un entero que es negativo (<), cero (=) o positivo (>).

Uso así:

Puede utilizar String.compareTo (String) que devuelve un entero que es negativo (<), cero (=) o positivo (>).

Se usa de modo:

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

intenta utilizar .trim() primero, antes de .equals(), o crear una nueva var cadena que tiene estas cosas.

5

En la función onclik, reemplace la primera línea con esta línea definitivamente obtendrá el resultado correcto.

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

0

hizo lo mismo aquí necesita para mostrar el "éxito" dos veces respuesta es datos 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

Esta no es una respuesta correcta a la pregunta – poohdedoo

+0

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