我正在创建一个应用程序,如果用户已经登录,我希望应用程序自动从文本文件登录。目前,在文本文件中我有" alex | ppp&#34 ;它匹配数据库条目。 首先调用以下方法
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);
}
我已经仔细检查了用户和传递的值,他们是&#34; alex&#34;和&#34; ppp&#34;这是预料之中的。下一个InitialStuff被调用,这是相关的代码:
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;
}}
一旦我调用看起来像这样的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从数据库返回&#34; ppp&#34;它匹配toonPass但它会跳过返回true并返回false。
如果有帮助,这就是eclipse给我的关于这两个的信息
toonPass&#34; ppp&#34; (ID = 830041185816)
数3
hashCode 0
抵消5
价值(id = 830041185744)
[0] a
[1] l
[2] e
[3] x
[4] |
[5] p
[6] p
[7] p
dbPass&#34; ppp&#34; (ID = 830041708816)
数3
hashCode 0
偏移0
价值(id = 830041709136)
[0] p
[1] p
[2] p
请注意我也试过传递&#34; ppp&#34;到tryLogin()方法而不将其作为子字符串,以防与问题有关,结果是相同的。
编辑:我解决了问题... sorta。我刚停止使用.equals()方法,而是使用for循环将每个字符串中的字符相互比较答案 0 :(得分:2)
一个提示! 如果您正在使用String类方法,例如。 .compare().equals()等。记住charset编码!特别要确保与IDE,项目文件,资源和db的编码(当您从外部源加载/读取数据时)
答案 1 :(得分:1)
if(dbPass.equals(toonPass)) //PROBLEM OCCURS HERE
你真的确定吗?
问题可能在这里:
catch(Exception e){ }
改为编写并检查日志:
catch(Exception e){ e.printStackTrace(); }
答案 2 :(得分:0)
奇怪的是,看起来Eclipse调试信息不匹配。您为char[]
打印的toonPass
看起来像是“alex | ppp”而dbPass
看起来像“ppp”。 toonPass
的偏移量为5使得它看起来像字符串相等,因为它跳过了前5个字符(“alex |”),因此达到了“ppp”。
我建议重写从文本文件中拆分“alex | ppp”的循环。如果你只想把它拆分为'|'然后角色info.split("|")
可能会成功。