Java Android SQLite用户登录不起作用
我实际上在我的应用程序中实现了一个SQLite数据库,并进行了登录活动。因此,当应用程序启动时,我开始登录活动,并在其中访问数据库。因此,用户输入名称和密码并按下anmelden键,然后数据库检查用户是否已经存在,如果存在,如果密码正确,如果密码正确,则活动结束,用户可以继续。如果密码不正确,但用户存在,则不会发生任何事情,并将显示祝酒词。如果没有具有给定名称的用户,则将使用该密码和名称创建一个新用户 我现在的问题是,当我创建一个新用户时,一切似乎都正常,但如果我重新启动应用程序并尝试使用相同的数据登录,它仍然会创建一个新用户 很遗憾,我无法说出数据库中的情况,因为我没有固定的电话自动取款机,所以我希望你们能帮助我,因为我没有发现错误 这是我的登录类Java Android SQLite用户登录不起作用,java,android,sqlite,login,Java,Android,Sqlite,Login,我实际上在我的应用程序中实现了一个SQLite数据库,并进行了登录活动。因此,当应用程序启动时,我开始登录活动,并在其中访问数据库。因此,用户输入名称和密码并按下anmelden键,然后数据库检查用户是否已经存在,如果存在,如果密码正确,如果密码正确,则活动结束,用户可以继续。如果密码不正确,但用户存在,则不会发生任何事情,并将显示祝酒词。如果没有具有给定名称的用户,则将使用该密码和名称创建一个新用户 我现在的问题是,当我创建一个新用户时,一切似乎都正常,但如果我重新启动应用程序并尝试使用相同的
public class Anmeldung extends Activity {
public Datasource datasource = new Datasource(this);
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_anmeldung);
}
//// OnClick-Methoden
/// public void anmelden(View view) {//the Login method
EditText t = (EditText) findViewById(R.id.editText_username);
String name = t.getText().toString();
EditText e = (EditText) findViewById(R.id.editText_passwort);
String psswd = e.getText().toString();
datasource.open();
if (datasource.UserExists(name)) {
if (datasource.correctPassword(name, psswd)) {
datasource.close();
finish();
} else {
@SuppressLint("WrongConstant") Toast toast = Toast.makeText(getApplicationContext(), "Falsches Passwort", 3);
toast.show();
}
} else {
datasource.createUser(name, psswd, 0, 0);
@SuppressLint("WrongConstant") Toast toast = Toast.makeText(getApplicationContext(), "Neuen Nutzer erstellt", 3);
toast.show();
finish();
}
}
}
这是我的datasource类和所有相关方法
public class Datasource {
//Log-Tag
private static final String LOG_TAG = Datasource.class.getSimpleName();
//Datenbankspezifische Variablen
private SQLiteDatabase database;
private Datahelper dbHelper;
private String[] columns = {Datahelper.COLUMN_ID, Datahelper.COLUMN_TYPE, Datahelper.COLUMN_NAME, Datahelper.COLUMN_EXPIRATION, Datahelper.COLUMN_OWNER};
private String[] columns_users = {Datahelper.COLUMN_ID_USERS, Datahelper.COLUMN_NAME_USERS, Datahelper.COLUMN_PSSWD_USERS, Datahelper.COLUMN_SOAP_USERS, Datahelper.COLUMN_EP_USERS};
private String[] column_id_user = {Datahelper.COLUMN_ID_USERS};
private String[] column_name_user = {Datahelper.COLUMN_NAME_USERS};
private String[] column_psswd_user = {Datahelper.COLUMN_PSSWD_USERS};
//Konstruktor
public Datasource(Context context) {
Log.d(LOG_TAG, "DataSource is now creating the dbHelper");
dbHelper = new Datahelper(context);
}
//Öffnen der Datenbank
public void open() {
Log.d(LOG_TAG, "asking for reference");
database = dbHelper.getWritableDatabase();
Log.d(LOG_TAG, "received reference. path: " + database.getPath());
}
//Schließen der Datenbank
public void close() {
dbHelper.close();
Log.d(LOG_TAG, "closed database");
}
public User createUser(String name, String psswd, long soap, long ep) {
ContentValues c = new ContentValues();
c.put(Datahelper.COLUMN_NAME_USERS, name);
c.put(Datahelper.COLUMN_PSSWD_USERS, psswd);
c.put(Datahelper.COLUMN_SOAP_USERS, soap);
c.put(Datahelper.COLUMN_EP_USERS, ep);
long insId = database.insert(Datahelper.TABLE_USERS, null, c);
Cursor cursor = database.query(Datahelper.TABLE_USERS, columns_users, Datahelper.COLUMN_ID_USERS + "=" + insId, null, null, null, null);
cursor.moveToLast();
return cursorToUser(cursor);
}
private User cursorToUser(Cursor cursor) {
int idId = cursor.getColumnIndex(Datahelper.COLUMN_ID_USERS);
int idName = cursor.getColumnIndex(Datahelper.COLUMN_NAME_USERS);
int idPsswd = cursor.getColumnIndex(Datahelper.COLUMN_PSSWD_USERS);
int idSoap = cursor.getColumnIndex(Datahelper.COLUMN_SOAP_USERS);
int idEp = cursor.getColumnIndex(Datahelper.COLUMN_EP_USERS);
long id = cursor.getLong(idId);
String name = cursor.getString(idName);
String psswd = cursor.getString(idPsswd);
long soap = cursor.getLong(idSoap);
long ep = cursor.getLong(idEp);
return new User(id, name, psswd, soap, ep);
}
public boolean UserExists(String name) {
try {
Cursor cursor = database.query(Datahelper.TABLE_USERS, column_id_user, Datahelper.COLUMN_NAME_USERS + " = " + name, null, null, null, null);
long id = cursor.getLong(cursor.getColumnIndex(Datahelper.COLUMN_ID_USERS));
cursor = database.query(Datahelper.TABLE_USERS, column_name_user, Datahelper.COLUMN_ID_USERS + " = " + id, null, null, null, null);
String n = cursor.getString(cursor.getColumnIndex(Datahelper.COLUMN_NAME_USERS));
return true;
} catch (Exception e) {
}
return false;
}
public boolean correctPassword(String name, String psswd) {
try {
Cursor cursor = database.query(Datahelper.TABLE_USERS, column_id_user, Datahelper.COLUMN_NAME_USERS + " = " + name, null, null, null, null);
long id = cursor.getLong(cursor.getColumnIndex(Datahelper.COLUMN_ID_USERS));
cursor = database.query(Datahelper.TABLE_USERS, column_name_user, Datahelper.COLUMN_ID_USERS + " = " + id, null, null, null, null);
String n = cursor.getString(cursor.getColumnIndex(Datahelper.COLUMN_NAME_USERS));
cursor = database.query(Datahelper.TABLE_USERS, column_psswd_user, Datahelper.COLUMN_ID_USERS + " = " + id, null, null, null, null);
String p = cursor.getString(cursor.getColumnIndex(Datahelper.COLUMN_PSSWD_USERS));
if (n == name && psswd == p) return true;
} catch (Exception e) {
}
return false;
}
}
希望您能帮助我,如果您需要其他帮助,请告诉我:
日志:
}
更改代码后的错误日志
但我不知道怎么格式化这个
12-21 07:53:25.097 22705-22705/com.ein_siedler.putzplaner W/System.err: android.database.CursorIndexOutOfBoundsException: Index -1 requested, with a size of 0
12-21 07:53:25.098 22705-22705/com.ein_siedler.putzplaner W/System.err: at android.database.AbstractCursor.checkPosition(AbstractCursor.java:460)
12-21 07:53:25.098 22705-22705/com.ein_siedler.putzplaner W/System.err: at android.database.AbstractWindowedCursor.checkPosition(AbstractWindowedCursor.java:136)
12-21 07:53:25.098 22705-22705/com.ein_siedler.putzplaner W/System.err: at android.database.AbstractWindowedCursor.getLong(AbstractWindowedCursor.java:74)
12-21 07:53:25.099 22705-22705/com.ein_siedler.putzplaner W/System.err: at com.ein_siedler.putzplaner.Datasource.UserExists(Datasource.java:141)
12-21 07:53:25.099 22705-22705/com.ein_siedler.putzplaner W/System.err: at com.ein_siedler.putzplaner.activities.Anmeldung.anmelden(Anmeldung.java:47)
12-21 07:53:25.099 22705-22705/com.ein_siedler.putzplaner W/System.err: at java.lang.reflect.Method.invoke(Native Method)
12-21 07:53:25.099 22705-22705/com.ein_siedler.putzplaner W/System.err: at android.view.View$DeclaredOnClickListener.onClick(View.java:4463)
12-21 07:53:25.099 22705-22705/com.ein_siedler.putzplaner W/System.err: at android.view.View.performClick(View.java:5233)
12-21 07:53:25.099 22705-22705/com.ein_siedler.putzplaner W/System.err: at android.view.View$PerformClick.run(View.java:21211)
12-21 07:53:25.100 22705-22705/com.ein_siedler.putzplaner W/System.err: at android.os.Handler.handleCallback(Handler.java:739)
12-21 07:53:25.100 22705-22705/com.ein_siedler.putzplaner W/System.err: at android.os.Handler.dispatchMessage(Handler.java:95)
12-21 07:53:25.100 22705-22705/com.ein_siedler.putzplaner W/System.err: at android.os.Looper.loop(Looper.java:148)
12-21 07:53:25.100 22705-22705/com.ein_siedler.putzplaner W/System.err: at android.app.ActivityThread.main(ActivityThread.java:5539)
12-21 07:53:25.100 22705-22705/com.ein_siedler.putzplaner W/System.err: at java.lang.reflect.Method.invoke(Native Method)
12-21 07:53:25.100 22705-22705/com.ein_siedler.putzplaner W/System.err: at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726)
12-21 07:53:25.100 22705-22705/com.ein_siedler.putzplaner W/System.err: at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)
我认为您的Datasource类中出现了一些错误,并且您的UserExists函数返回false;你看不到任何错误,因为你错过了e.printStackTrace;在每个try-catch的catch-exception部分中,尝试设置e.printStackTrace;每次尝试捕获数据源类并重建应用程序并运行它。在那里显示Catlog 更新: 尝试此功能:
public boolean UserExists(String name) {
try {
Cursor cursor = database.query(Datahelper.TABLE_USERS, null, Datahelper.COLUMN_NAME_USERS + " = '" + name + "'", null, null, null, null);
String n = cursor.getString(cursor.getColumnIndex(Datahelper.COLUMN_NAME_USERS));
return true;
} catch (Exception e) {
e.printStackTrace();
}
return false;
}
如果您在sql查询中使用字符串值,请检查两次,它必须介于之间。DataHelper类中存在问题。您可以显示它吗?添加了DataHelper类它仍然不起作用,但我实际上得到了一个IndexOutOfBounds例外添加了日志,但是我无法将其格式化好我看到您在UserExists函数中使用了不可用的代码修复了它在方法中UserExists在catch块中添加语句e.printStackTrace从那里您可以检查日志,也可以检查日志中的错误。告诉我原因是什么!我已经添加了堆栈跟踪并发布了日志,它不在代码中,但是已经有人问过了
12-21 07:53:25.097 22705-22705/com.ein_siedler.putzplaner W/System.err: android.database.CursorIndexOutOfBoundsException: Index -1 requested, with a size of 0
12-21 07:53:25.098 22705-22705/com.ein_siedler.putzplaner W/System.err: at android.database.AbstractCursor.checkPosition(AbstractCursor.java:460)
12-21 07:53:25.098 22705-22705/com.ein_siedler.putzplaner W/System.err: at android.database.AbstractWindowedCursor.checkPosition(AbstractWindowedCursor.java:136)
12-21 07:53:25.098 22705-22705/com.ein_siedler.putzplaner W/System.err: at android.database.AbstractWindowedCursor.getLong(AbstractWindowedCursor.java:74)
12-21 07:53:25.099 22705-22705/com.ein_siedler.putzplaner W/System.err: at com.ein_siedler.putzplaner.Datasource.UserExists(Datasource.java:141)
12-21 07:53:25.099 22705-22705/com.ein_siedler.putzplaner W/System.err: at com.ein_siedler.putzplaner.activities.Anmeldung.anmelden(Anmeldung.java:47)
12-21 07:53:25.099 22705-22705/com.ein_siedler.putzplaner W/System.err: at java.lang.reflect.Method.invoke(Native Method)
12-21 07:53:25.099 22705-22705/com.ein_siedler.putzplaner W/System.err: at android.view.View$DeclaredOnClickListener.onClick(View.java:4463)
12-21 07:53:25.099 22705-22705/com.ein_siedler.putzplaner W/System.err: at android.view.View.performClick(View.java:5233)
12-21 07:53:25.099 22705-22705/com.ein_siedler.putzplaner W/System.err: at android.view.View$PerformClick.run(View.java:21211)
12-21 07:53:25.100 22705-22705/com.ein_siedler.putzplaner W/System.err: at android.os.Handler.handleCallback(Handler.java:739)
12-21 07:53:25.100 22705-22705/com.ein_siedler.putzplaner W/System.err: at android.os.Handler.dispatchMessage(Handler.java:95)
12-21 07:53:25.100 22705-22705/com.ein_siedler.putzplaner W/System.err: at android.os.Looper.loop(Looper.java:148)
12-21 07:53:25.100 22705-22705/com.ein_siedler.putzplaner W/System.err: at android.app.ActivityThread.main(ActivityThread.java:5539)
12-21 07:53:25.100 22705-22705/com.ein_siedler.putzplaner W/System.err: at java.lang.reflect.Method.invoke(Native Method)
12-21 07:53:25.100 22705-22705/com.ein_siedler.putzplaner W/System.err: at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726)
12-21 07:53:25.100 22705-22705/com.ein_siedler.putzplaner W/System.err: at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)
public boolean UserExists(String name) {
try {
Cursor cursor = database.query(Datahelper.TABLE_USERS, null, Datahelper.COLUMN_NAME_USERS + " = '" + name + "'", null, null, null, null);
String n = cursor.getString(cursor.getColumnIndex(Datahelper.COLUMN_NAME_USERS));
return true;
} catch (Exception e) {
e.printStackTrace();
}
return false;
}