Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/328.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 为什么我在SQLite中登录页面时页面会自动关闭?_Java_Android_Database_Sqlite_Android Studio - Fatal编程技术网

Java 为什么我在SQLite中登录页面时页面会自动关闭?

Java 为什么我在SQLite中登录页面时页面会自动关闭?,java,android,database,sqlite,android-studio,Java,Android,Database,Sqlite,Android Studio,我的问题:我该怎么办 1。下面是我在logcat中的错误 2。在SQLite浏览器中打开数据时,为什么我的数据没有输入SQLite数据库? 3。几乎所有我研究和使用的方法,但他们都不能使用。 我的连接SQLite数据库:database.java package com.example.projectvote; import android.content.ContentValues; import android.content.Context; import android.data

我的问题:我该怎么办

1。下面是我在logcat中的错误

2。在SQLite浏览器中打开数据时,为什么我的数据没有输入SQLite数据库?

3。几乎所有我研究和使用的方法,但他们都不能使用。

我的连接SQLite数据库:database.java

package com.example.projectvote;

import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import android.util.Log;

import static androidx.constraintlayout.widget.Constraints.TAG;

public class Database extends SQLiteOpenHelper {
private static final String TAG = "Database";
public static final String DbName = "SignUp.db";
public static final String TbName = "SignUp";
public static final String Col1 = "Num";
public static final String Col2 = "ID";
public static final String Col3 = "Password";

public static final String TbName1 = "candidate";
public static final String Col4 = "Nom";
public static final String Col5 = "Candidates";

public Database(Context context) {
    super(context, DbName, null, 1);
}

@Override
public void onCreate(SQLiteDatabase sqLiteDatabase) {
    sqLiteDatabase.execSQL("CREATE TABLE SignUp (Num INT PRIMARY KEY AUTOINCREMENT, ID TEXT, Password TEXT)");
    sqLiteDatabase.execSQL("CREATE TABLE candidate (Nom INT PRIMARY KEY AUTOINCREMENT, Candidates TEXT)");
}

@Override
public void onUpgrade(SQLiteDatabase sqLiteDatabase, int i, int i1) {
    sqLiteDatabase.execSQL(" DROP TABLE IF EXISTS " + TbName);
    sqLiteDatabase.execSQL(" DROP TABLE IF EXISTS " + TbName1);
    onCreate(sqLiteDatabase);
}

public long addUser(String ID, String password)
{
    SQLiteDatabase db = this.getWritableDatabase();
    ContentValues cv = new ContentValues();
    cv.put("ID", ID);
    cv.put("password", password);
    long res = db.insert("SignUp", null, cv);
    db.close();
    return res;
}

public boolean checkUser(String ID, String password)
{
    String[] columns = { Col2 };
    SQLiteDatabase db = getReadableDatabase();
    String selection = Col2 + "=?" + "and" + Col3 + "=?";
    String[] selectionArgs = { ID, password };
    Cursor c = db.query(TbName, columns, selection, selectionArgs, null, null, null);
    int count = c.getCount();
    c.close();
    db.close();

    if (count > 0)
        return true;
    else
        return false;
}

public Cursor readData(SQLiteDatabase db) {
    String[] cols = { Col5 };
    Cursor c = db.query(TbName1, cols, null, null, null, null, null);
    return c;
}

public boolean addCandidate(String Candidates)
{
    SQLiteDatabase db = this. getWritableDatabase();
    ContentValues cv = new ContentValues();
    cv.put(Col5, Candidates);
    Log.d(TAG, "addCandidate : Adding " + Candidates + " to " + TbName1);
    long res = db.insert(TbName1, null, cv);
    if(res == -1)
    {
        return false;
    }
    else
    {
        return true;
    }
}

public Cursor getItemID(String Candidates)
{
    SQLiteDatabase db = this.getWritableDatabase();
    String query = "SELECT " + Col4 + " FROM " + TbName1 + " WHERE " + Col5 + " = " + Candidates + "'";
    Cursor data = db.rawQuery(query, null);
    return data;
}

public void updateCandidate(String newCandidate, int ID, String oldCandidate)
{
    SQLiteDatabase db = this.getWritableDatabase();
    String query = "UPDATE " + TbName1 + " SET " + Col5 + "= '" + newCandidate + "' WHERE " + Col5 + "= '" + oldCandidate + "'";
    Log.d(TAG, "updateCandidate: query: " + query);
    Log.d(TAG, "updateCandidate: Setting Candidate to " + newCandidate);
    db.execSQL(query);
}

public void deleteCandidate(int ID, String Candidate)
{
    SQLiteDatabase db = this.getWritableDatabase();
    String query = "DELETE FROM " + TbName1 + " WHERE " + Col5 + "= '" + Candidate + "'";
    Log.d(TAG, "deleteCandidate: query: " + query);
    Log.d(TAG, "deleteCandidate: Deleting: " + Candidate + " from database ");
    db.execSQL(query);
}

public Cursor getListContent1() {
    SQLiteDatabase db = this.getWritableDatabase();
    String query = "SELECT * FROM " + TbName1;
    Cursor data = db.rawQuery(query, null);
    return data;
}
}
package com.example.projectvote;

import androidx.appcompat.app.AppCompatActivity;

import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.EditText;
import android.widget.Toast;

public class Login extends AppCompatActivity
{
EditText ID, password;
Database db;

@Override
protected void onCreate(Bundle savedInstanceState)
{
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_login);

    db = new Database(this);

    ID = findViewById(R.id.etID);
    password = findViewById(R.id.etPassword);
}

public void OnLog(View view)
{
    String Id = ID.getText().toString().trim();
    String Password = password.getText().toString().trim();
    Boolean res = db.checkUser(Id, Password);
    if (res == true)
    {
        startActivity(new Intent(getApplicationContext(), Home.class));
    }
    else if ((ID.equals("Admin") && Password.equals("Admin2019")))
    {
        startActivity(new Intent(getApplicationContext(), Admin.class));
    }
    else
    {
        Toast.makeText(Login.this, "Sorry, Login Error", Toast.LENGTH_SHORT).show();
    }
}

public void OnReg(View view) {
    startActivity(new Intent(getApplicationContext(), SignUp.class));
}
}
我的登录java:login.java

package com.example.projectvote;

import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import android.util.Log;

import static androidx.constraintlayout.widget.Constraints.TAG;

public class Database extends SQLiteOpenHelper {
private static final String TAG = "Database";
public static final String DbName = "SignUp.db";
public static final String TbName = "SignUp";
public static final String Col1 = "Num";
public static final String Col2 = "ID";
public static final String Col3 = "Password";

public static final String TbName1 = "candidate";
public static final String Col4 = "Nom";
public static final String Col5 = "Candidates";

public Database(Context context) {
    super(context, DbName, null, 1);
}

@Override
public void onCreate(SQLiteDatabase sqLiteDatabase) {
    sqLiteDatabase.execSQL("CREATE TABLE SignUp (Num INT PRIMARY KEY AUTOINCREMENT, ID TEXT, Password TEXT)");
    sqLiteDatabase.execSQL("CREATE TABLE candidate (Nom INT PRIMARY KEY AUTOINCREMENT, Candidates TEXT)");
}

@Override
public void onUpgrade(SQLiteDatabase sqLiteDatabase, int i, int i1) {
    sqLiteDatabase.execSQL(" DROP TABLE IF EXISTS " + TbName);
    sqLiteDatabase.execSQL(" DROP TABLE IF EXISTS " + TbName1);
    onCreate(sqLiteDatabase);
}

public long addUser(String ID, String password)
{
    SQLiteDatabase db = this.getWritableDatabase();
    ContentValues cv = new ContentValues();
    cv.put("ID", ID);
    cv.put("password", password);
    long res = db.insert("SignUp", null, cv);
    db.close();
    return res;
}

public boolean checkUser(String ID, String password)
{
    String[] columns = { Col2 };
    SQLiteDatabase db = getReadableDatabase();
    String selection = Col2 + "=?" + "and" + Col3 + "=?";
    String[] selectionArgs = { ID, password };
    Cursor c = db.query(TbName, columns, selection, selectionArgs, null, null, null);
    int count = c.getCount();
    c.close();
    db.close();

    if (count > 0)
        return true;
    else
        return false;
}

public Cursor readData(SQLiteDatabase db) {
    String[] cols = { Col5 };
    Cursor c = db.query(TbName1, cols, null, null, null, null, null);
    return c;
}

public boolean addCandidate(String Candidates)
{
    SQLiteDatabase db = this. getWritableDatabase();
    ContentValues cv = new ContentValues();
    cv.put(Col5, Candidates);
    Log.d(TAG, "addCandidate : Adding " + Candidates + " to " + TbName1);
    long res = db.insert(TbName1, null, cv);
    if(res == -1)
    {
        return false;
    }
    else
    {
        return true;
    }
}

public Cursor getItemID(String Candidates)
{
    SQLiteDatabase db = this.getWritableDatabase();
    String query = "SELECT " + Col4 + " FROM " + TbName1 + " WHERE " + Col5 + " = " + Candidates + "'";
    Cursor data = db.rawQuery(query, null);
    return data;
}

public void updateCandidate(String newCandidate, int ID, String oldCandidate)
{
    SQLiteDatabase db = this.getWritableDatabase();
    String query = "UPDATE " + TbName1 + " SET " + Col5 + "= '" + newCandidate + "' WHERE " + Col5 + "= '" + oldCandidate + "'";
    Log.d(TAG, "updateCandidate: query: " + query);
    Log.d(TAG, "updateCandidate: Setting Candidate to " + newCandidate);
    db.execSQL(query);
}

public void deleteCandidate(int ID, String Candidate)
{
    SQLiteDatabase db = this.getWritableDatabase();
    String query = "DELETE FROM " + TbName1 + " WHERE " + Col5 + "= '" + Candidate + "'";
    Log.d(TAG, "deleteCandidate: query: " + query);
    Log.d(TAG, "deleteCandidate: Deleting: " + Candidate + " from database ");
    db.execSQL(query);
}

public Cursor getListContent1() {
    SQLiteDatabase db = this.getWritableDatabase();
    String query = "SELECT * FROM " + TbName1;
    Cursor data = db.rawQuery(query, null);
    return data;
}
}
package com.example.projectvote;

import androidx.appcompat.app.AppCompatActivity;

import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.EditText;
import android.widget.Toast;

public class Login extends AppCompatActivity
{
EditText ID, password;
Database db;

@Override
protected void onCreate(Bundle savedInstanceState)
{
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_login);

    db = new Database(this);

    ID = findViewById(R.id.etID);
    password = findViewById(R.id.etPassword);
}

public void OnLog(View view)
{
    String Id = ID.getText().toString().trim();
    String Password = password.getText().toString().trim();
    Boolean res = db.checkUser(Id, Password);
    if (res == true)
    {
        startActivity(new Intent(getApplicationContext(), Home.class));
    }
    else if ((ID.equals("Admin") && Password.equals("Admin2019")))
    {
        startActivity(new Intent(getApplicationContext(), Admin.class));
    }
    else
    {
        Toast.makeText(Login.this, "Sorry, Login Error", Toast.LENGTH_SHORT).show();
    }
}

public void OnReg(View view) {
    startActivity(new Intent(getApplicationContext(), SignUp.class));
}
}

更新
Database.java的onCreate()中的查询,如下所示

sqLiteDatabase.execSQL("CREATE TABLE SignUp (Num INTEGER PRIMARY KEY AUTOINCREMENT, ID TEXT, Password TEXT)");
sqLiteDatabase.execSQL("CREATE TABLE candidate (Num INTEGER PRIMARY KEY AUTOINCREMENT, Candidates TEXT)");

你能添加完整的堆栈跟踪吗?它在映像中不可见?完整堆栈跟踪哪一个?db crash stacktracedone update。如果我给你想要的东西错了,请纠正我,因为我是初学者。我已经对答案发表了评论。检查答案,看看它是否解决了您的问题。它成功了,但在我注册并登录之后。这不是我想要的页面,为什么?你知道吗?现在导航到哪一页??添加用户的位置导航到注册,然后登录。在我进入登录后,它将带我回到注册