Java .equals () devuelve false cuando las cadenas son iguales

Estoy haciendo una aplicación y quiero que la aplicación se conecte automáticamente desde un archivo de texto si el usuario ya ha iniciado sesión. En la actualidad, en el archivo de texto tengo "alex | ppp" que coincide con la entrada de la base de datos. El siguiente método se llama primero

private void rememberedLogIn(){ String filename = "UserInfo.txt"; String info = ""; String user = ""; String pass = ""; try{ FileInputStream fIn = openFileInput(filename); BufferedReader r = new BufferedReader(new InputStreamReader(fIn)); info = r.readLine(); }catch(IOException e){ e.printStackTrace(System.err); } for(int i =0; i < info.length();i++){ if(info.charAt(i) == '|' ){ user = info.substring(0,i); pass = info.substring(i+1); GlobalVar.loggedIn= true; break; } } new InitialStuff().execute(user,pass); } 

He comprobado dos veces los valores para el usuario y pasar y son "alex" y "ppp" que se espera. Next InitialStuff se llama, este es el código relevante:

 public class InitialStuff extends AsyncTask<String, Void, Toon>{ int prog = 0; @Override protected Toon doInBackground(String... params) { android.os.Debug.waitForDebugger(); Toon toon = null; Database db = new Database(); db.establishConnection(); if(db.tryLogIn(params[0], params[1])){ prog = 2; publishProgress(); toon = db.getToonFromDB(params[0]); prog = 4; }else prog = 3; publishProgress(); return toon; }} 

El problema ocurre una vez que llamo el db.tryLogin () que se parece a esto

 public boolean tryLogIn(String toonName, String toonPass){ try{ while(!connected) establishConnection(); String sqlQuery = "SELECT Password FROM Toons WHERE Name LIKE '" + toonName+"';"; Statement stmt = con.createStatement(); ResultSet rSet = stmt.executeQuery(sqlQuery); if(rSet.next()){ String dbPass = rSet.getString(1).trim(); if(dbPass.equals(toonPass)) //PROBLEM OCCURS HERE return true; } } catch(Exception e){ } return false; } 

He comprobado para ver que dbPass vuelve de la base de datos como "ppp", que coincide con toonPass sin embargo, se saltará el retorno true y devolverá false en su lugar.

Si ayuda, este es el eclipse de información que me da acerca de los dos

ToonPass "ppp" (id = 830041185816) cuenta 3
HashCode 0
Desplazamiento 5
Valor (id = 830041185744)
[0] a
[1] l
[2] e
[3] x
[4] |
[5] p
[6] p
[7] p

DbPass "ppp" (id = 830041708816) cuenta 3
HashCode 0
Desplazamiento 0
Valor (id = 830041709136)
[0] p
[1] p
[2] p

Pleaes nota que también he intentado pasar en "ppp" al tryLogin () método sin tomarlo como una subcadena en caso de que tenía algo que ver con el problema y el resultado es el mismo.

EDIT: He resuelto el problema … sorta. Acabo de dejar de usar el método .equals () y en su lugar estoy usando un bucle for que compara los caracteres de cada cadena a otro

Una pista Si está jugando con métodos de clase String, por ejemplo. .compare () .equals () etc. recuerda la codificación de charset! Especialmente asegúrese de coincidir con IDE, archivos de proyecto, recursos y la codificación de DB (cuando se carga / leer datos como cadena de fuentes externas)

 if(dbPass.equals(toonPass)) //PROBLEM OCCURS HERE 

Estas realmente seguro ?

El problema es probablemente aquí:

 catch(Exception e){ } 

Escriba esto en su lugar e inspeccione sus registros:

 catch(Exception e){ e.printStackTrace(); } 

Curiosamente, parece que la información de depuración de Eclipse no coincide. El char[] que ha impreso para toonPass parece que dice "alex | ppp" y dbPass parece "ppp". El desplazamiento de 5 para toonPass hace que parezca que las cadenas son iguales porque se omitieron los primeros 5 caracteres ("alex |") y, por lo tanto, hasta "ppp".

Yo sugeriría reescribir el bucle que divide el "alex | ppp" del archivo de texto. Si sólo desea dividirlo en el '|' Carácter entonces info.split("|") probablemente hará el truco.

  • Copiar directorios y archivos de la carpeta res / raw a la tarjeta sd - android
  • ¿Podemos usar Optionals en la programación de Android?
  • Parse Json en el estudio android de String
  • Detección de círculos de Hough android
  • Cómo actualizar un TextView de una actividad de otra clase
  • Android: Carga de una foto en Cloudinary con devolución de llamada de progreso en HttpURLConnection
  • Android <2.3 y java.text.Normalizer
  • Busquen una letra abreviatura de week day of a date en java
  • Android: consulta ContactsContract, necesita más cadena de selección avanzada
  • Cómo extraer el cursor y el valor entero de una matriz de clase Object
  • Cómo anular el botón de inicio de Android
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.