Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/376.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Android SQLite用户登录不起作用_Java_Android_Sqlite_Login - Fatal编程技术网

Java Android SQLite用户登录不起作用

Java Android SQLite用户登录不起作用,java,android,sqlite,login,Java,Android,Sqlite,Login,我实际上在我的应用程序中实现了一个SQLite数据库,并进行了登录活动。因此,当应用程序启动时,我开始登录活动,并在其中访问数据库。因此,用户输入名称和密码并按下anmelden键,然后数据库检查用户是否已经存在,如果存在,如果密码正确,如果密码正确,则活动结束,用户可以继续。如果密码不正确,但用户存在,则不会发生任何事情,并将显示祝酒词。如果没有具有给定名称的用户,则将使用该密码和名称创建一个新用户 我现在的问题是,当我创建一个新用户时,一切似乎都正常,但如果我重新启动应用程序并尝试使用相同的

我实际上在我的应用程序中实现了一个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;
}