我正在创建一个应用程序,如果用户已经登录,我希望应用程序自动从文本文件登录.目前,在文本文件中,我有“alex | ppp”,它与数据库条目匹配.
首先调用以下方法
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);
}
我已经仔细检查了用户和传递的值,它们是“alex”和“ppp”,这是预期的.下一个InitialStuff被调用,这是相关的代码:
public class InitialStuff extends AsyncTask{
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;
}}
一旦我调用db.tryLogin()看起来像这样就会出现问题
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;
}
我已经检查过dbPass从数据库返回的是“ppp”,它匹配toonPass但是它将跳过返回true并返回false.
如果它有帮助,这是日食给我的关于这两个的信息
toonPass“ppp”(id = 830041185816)
数3
hashCode 0
抵消5
价值(id = 830041185744)
[0] a
[1] l
[2] e
[3] x
[4] |
[5] p
[6] p
[7] p
dbPass“ppp”(id = 830041708816)
数3
hashCode 0
偏移0
价值(id = 830041709136)
[0] p
[1] p
[2] p
请注意,我也尝试将“ppp”传递给tryLogin()方法,而不将其作为子字符串,以防与问题有关并且结果相同.
编辑:我解决了问题… sorta.我刚停止使用.equals()方法,而是使用for循环将每个字符串中的字符相互比较