Java Android Studio SQL ResultSet NullPointerException при выполнении приложением - PullRequest
0 голосов
/ 09 января 2020

Я новичок здесь, а также более или менее новичок в программировании Java. Это также мой первый Android проект. На данный момент я пытаюсь сделать логин и регистрацию аккаунта с SQL.

Сначала код:

Класс базы данных:

import java.sql.*;

public class Database {

    private Connection connection;
    private Statement statement;
    private ResultSet resultSet;
    private PreparedStatement preparedStatement;



    public ResultSet connectQuery(String query) {

        try {

            Class.forName("com.mysql.cj.jdbc.Driver");

            connection = DriverManager.getConnection("jdbc:mysql://...", "...", "...");
            statement = connection.createStatement();
            resultSet = statement.executeQuery(query);

        } catch (Exception e) {
            e.printStackTrace();
        }

        return resultSet;
    }


    public boolean alreadyExisting(String username) {
        try {
            String query = "SELECT username FROM users WHERE username = '" + username + "'";
            ResultSet result = connectQuery(query);

            return result.next();

        } catch(SQLException e) {
            System.out.println(e);
        }
        return true;
    }
}

LoginActivity класс:

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

import androidx.appcompat.app.AppCompatActivity;

import de.simbo.songrequest.MainActivity;
import de.simbo.songrequest.R;
import de.simbo.songrequest.database.Database;

public class LoginActivity extends AppCompatActivity {

    Database database;
    private ImageButton login;
    private ImageButton create;
    private EditText username;
    private EditText password;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_login);
        accountTest = new AccountTest();
        database = new Database();
        username = findViewById(R.id.Username);
        password = findViewById(R.id.Password);
        login = findViewById(R.id.Login);
        create = findViewById(R.id.Create);

        Intent intent = new Intent(this, CreateAccountActivity.class);
        create.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                startActivity(intent);
            }
        });

        login.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                signIn(username.getText().toString(), password.getText().toString());
            }
        });

    }

    public void signIn(String username, String password) {
        if (database.alreadyExisting(username)) {
            if (database.getPassword(username).equals(password)) {
                Intent intent = new Intent(this, MainActivity.class);
                startActivity(intent);
            }
        }
    }
}

Основной класс:

import de.simbo.songrequest.account.CreateAccountActivity;
import de.simbo.songrequest.database.Database;
import de.simbo.songrequest.queue.Queue;
import de.simbo.songrequest.song.Song;

public class Main {

    static Database database;

    public static void main(String args[]) {

        database = new Database();
        database.alreadyExisting("timbo");
    }
}

Теперь моя проблема: если я вызываю метод УжеExisting () в Базе данных из основного класса, все в порядке. Но как только уже Existing () вызывается нажатием кнопки входа в приложение, появляется следующее сообщение:

    java.lang.NullPointerException: Attempt to invoke interface method 'boolean java.sql.ResultSet.next()' on a null object reference
        at de.simbo.songrequest.database.Database.alreadyExisting(Database.java:114)
        at de.simbo.songrequest.account.LoginActivity.signIn(LoginActivity.java:53)
        at de.simbo.songrequest.account.LoginActivity$2.onClick(LoginActivity.java:46)
        at android.view.View.performClick(View.java:6597)
        at android.view.View.performClickInternal(View.java:6574)
        at android.view.View.access$3100(View.java:778)
        at android.view.View$PerformClick.run(View.java:25885)
        at android.os.Handler.handleCallback(Handler.java:873)
        at android.os.Handler.dispatchMessage(Handler.java:99)
        at android.os.Looper.loop(Looper.java:193)
        at android.app.ActivityThread.main(ActivityThread.java:6669)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:858)

Почему эта ошибка возникает только при использовании приложения?

Надеюсь, кто-нибудь сможет мне помочь.

Заранее спасибо

1 Ответ

0 голосов
/ 14 января 2020

Думаю, у меня проблема. Похоже, Android может подключаться только к SQLite, а не к MySQL. Например, между ними должен быть запущен скрипт node.js или php. Тем не менее, спасибо за ваши ответы.

...