gpt4 book ai didi

java - 使用SQLite数据库的Android用户登录系统

转载 作者:行者123 更新时间:2023-11-29 03:26:14 25 4
gpt4 key购买 nike

我正在尝试在我的 Android 应用程序中实现一个简单的登录系统,但我遇到了无法解决的运行时异常问题。我是 Android 的新手,事实上这将是我的第一个应用程序。我试过调试器,但我得到了很多“附加源”,不知道我应该怎么做?无论哪种方式,我似乎都无法弄清楚调试器抛出异常的原因,但错误是我的 AttemptLogin 方法中尝试 getUserByName 的行中的 NullPointerException。我已经检查了传递过来的用户名,看起来不错,但不确定我还需要检查什么!?我是否犯了一些我无法发现的新手错误?

package com.devTB.styleboutique_clientmanagement;

import android.app.Activity;
import android.content.Intent;
import android.database.Cursor;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
import android.widget.Toast;

public class UserLogin extends Activity {

private SQLiteAdapter sqLiteAdapter;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);

setContentView(R.layout.login);

Button btnLogin = (Button) findViewById(R.id.btnLogin);

btnLogin.setOnClickListener(new Button.OnClickListener()
{
@Override
public void onClick(View v) {
AttemptLogin();
}
});
}


public void AttemptLogin()
{
TextView txtUser = (TextView) findViewById(R.id.txtUserName);
TextView txtPass = (TextView) findViewById(R.id.txtPassword);
String userName = txtUser.getText().toString();
String inputPassword = txtPass.getText().toString();

Cursor c = sqLiteAdapter.getUserByName(userName);
if(c.getCount() == 0)
{
Toast.makeText(getApplicationContext(), "User name does not exist",
Toast.LENGTH_LONG).show();
txtUser.setText("");
txtPass.setText("");
return;
}

// decrypt password from database
String password = PwCrypt.decryptPassword(c.getBlob(2));

if(inputPassword == password)
{
User.setId(c.getInt(0));
User.setUserName(userName);
User.setUserAdmin(true);
// Login
Intent i = new Intent(this, MainActivity.class);
startActivity(i);
finish();
}
else
{
Toast.makeText(getApplicationContext(), "Incorrect password",
Toast.LENGTH_LONG).show();
txtPass.setText("");
return;
}
}
}

SQLiteAdapter 方法:

public Cursor getUserByName(String userName)
{
String[] columns = new String[]{ COL_USERS_ID,
COL_USERS_NAME,
COL_USERS_PW,
COL_USERS_ADMIN };

Cursor cursor = sqLiteDatabase.query(MYTABLE_USERS, columns, COL_USERS_NAME + " = '" + userName + "'", null, null, null, null);
cursor.moveToFirst();
return cursor;
}

最佳答案

在您的 on create 方法中,您需要初始化您的 sqliteAdapter(mSQLiteAdapter 是一个更合适的名称)。它将类似于:sqLiteAdapter = new SQLiteAdapter(this);

如果你不初始化它,你只是在调用一个空对象,它会抛出一个异常,即使它被定义为那个对象。

希望对你有帮助

关于java - 使用SQLite数据库的Android用户登录系统,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20841520/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com