[英]Using cursor.getString() crashes my app
I've been trying to make a Login app. 我一直在尝试制作一个登录应用程序。 This is
LoginActivity
: 这是
LoginActivity
:
public class LoginActivity extends AppCompatActivity {
EditText UsernameLogin, PasswordLogin;
UserDbHelper userDbHelper;
SQLiteDatabase sqLiteDatabase;
public static Cursor cursor;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.layout_login_activity);
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
}
public void loginUser(View view) {
UsernameLogin = (EditText) findViewById(R.id.insert_username);
PasswordLogin = (EditText) findViewById(R.id.insert_password);
String Username = UsernameLogin.getText().toString();
String Password = PasswordLogin.getText().toString();
userDbHelper = new UserDbHelper(getApplicationContext());
sqLiteDatabase = userDbHelper.getReadableDatabase();
cursor = userDbHelper.getUsername(Username, sqLiteDatabase);
if(cursor.getCount() != 0) {
if(cursor.getString(3).equals(Password)) {
Intent intent = new Intent(this, WelcomeActivity.class);
startActivity(intent);
Toast.makeText(this, "Login successful!", Toast.LENGTH_LONG).show();
}
else {
Toast.makeText(this, "Wrong Password", Toast.LENGTH_SHORT).show();
PasswordLogin.setText("");
}
} else {
Toast.makeText(this, "Username does not exist", Toast.LENGTH_SHORT).show();
UsernameLogin.setText("");
PasswordLogin.setText("");
}
}
}
And this is the getUsername
method inside UserDbHelper
: 这是
UserDbHelper
的getUsername
方法:
public Cursor getUsername (String username, SQLiteDatabase db) {
String[] projections = {UserContract.NewUserInfo.FIRST_NAME, UserContract.NewUserInfo.LAST_NAME,
UserContract.NewUserInfo.USER_PASSWORD, UserContract.NewUserInfo.USER_EMAIL};
String selection = UserContract.NewUserInfo.USER_NAME + " LIKE ?";
String[] selection_args = {username};
Cursor cursor = db.query(UserContract.NewUserInfo.TABLE_NAME, projections, selection, selection_args, null, null, null);
return cursor;
}
This crashes my app. 这会使我的应用程序崩溃。 If I replace
cursor.getString(3)
with a string, the app runs properly. 如果我用字符串替换
cursor.getString(3)
,则该应用程序将正常运行。
Don't use magic numbers. 不要使用幻数。 Cursor has the method
getColumnIndex
Eg 游标具有方法
getColumnIndex
Eg
cursor.getString(cursor.getColumnIndex(UserContract.NewUserInfo.USER_PASSWORD));
and don't forget to call cursor.moveToFirst()
before querying it 并且不要忘记在查询之前调用
cursor.moveToFirst()
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.