我正在创建一个包含登录/注册功能的应用程序,而我正在尝试解决这个问题。
当用户登录并且登录成功时,我想使用他们登录的电子邮件使用Intent传递给下一个活动(我检查了电子邮件实际上是通过显示什么来传递的正在传递意图),然后将该电子邮件传递给Dbhelper中的一个函数,该函数使用该电子邮件查找登录的人的姓名然后显示"欢迎(人名)"在当前活动中,但我一直在函数中返回null,最终导致应用程序崩溃。
这是我在活动中调用该功能的地方。
if(!session.loggedIn())
{
Logout();
}
else
{
Intent in = getIntent();
String email = in.getStringExtra("email");
Name.setText("Welcome " + db.findName(email));
}
这是我的DbHelper.java中的函数,我在那里查找带有查询的名称等。
public String findName(String user_email)
{
String query = "SELECT " + COLUMN_NAME + " FROM " + USER_TABLE + " WHERE " + COLUMN_EMAIL + " = " + "'" + user_email + "'";
SQLiteDatabase db = this.getWritableDatabase();
//reads for database
Cursor c = db.rawQuery(query, null);
c.moveToFirst();
if(c.getCount() > 0) // if cursor is not empty
{
String n = c.getString(0);
return n;
}
else
{
return null;
}
}
如您所见,它返回null。是的,数据库中已有条目。此外,我尝试将电子邮件传递给函数并返回传递的内容,但它仍然给我一个错误。
答案 0 :(得分:0)
通常,要检查文本列中的值,请不要使用相等的=
符号,而应使用WHERE Column LIKE '%text%'
。此外,当保存到数据库时,您应该逃避并且"清理"字符串。如果你这样做了,那么在寻找它们时你也应该做同样的过程,否则你将无法找到它们。
我告诉你,因为即使您确定表中有条目,查询结果也可能为空。您可以通过打印c.getCount()
调用的结果进行调试。