Отображение имени пользователя из базы данных SQLite android studio - PullRequest
0 голосов
/ 29 октября 2019

Я пытался использовать этот метод, чтобы сделать это: Android - отображать имя пользователя из базы данных sqlite после входа в систему в textView

, но я получаю ошибку:

Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.String com.example.inzynierka.DatabaseHelper.getUsername()' on a null object reference
        at com.example.inzynierka.UserPanelActivity.onCreate(UserPanelActivity.java:65)

Я хочу, чтобы после успешного входа в систему отображался текущий ник в UserPanelActivity.

UserPanelActivity:

package com.example.inzynierka;

import androidx.appcompat.app.AppCompatActivity;


import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;


public class UserPanelActivity extends AppCompatActivity {
    private Button settings_btn, progress_btn, dailychallenge_btn, premium_btn, logout_btn;
    public TextView NickNameText;
    DatabaseHelper db;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_user_panel);

        settings_btn = findViewById(R.id.settings_user_panel_button);
        settings_btn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Settings();
            }
        });

        progress_btn = findViewById(R.id.progress_button);
        progress_btn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                MyProgress();
            }
        });

        dailychallenge_btn = findViewById(R.id.challenge_button);
        dailychallenge_btn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                DailyChallenge();
            }
        });

        premium_btn = findViewById(R.id.premium_button);
        premium_btn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Premium();
            }
        });

        logout_btn = findViewById(R.id.logout_button);
        logout_btn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                BackToMenu();
                finish();
            }
        });
        NickNameText =  findViewById(R.id.nickname);

        NickNameText.setText(db.getUsername());
    }

    private void BackToMenu() {
        Intent intent = new Intent(this, MainActivity.class);
        startActivity(intent);
    }

    private void Premium() {
        Intent intent = new Intent(this,PremiumActivity.class);
        startActivity(intent);
    }

    private void DailyChallenge() {
        Intent intent = new Intent(this,DailyChallengeActivity.class);
        startActivity(intent);
    }

    private void MyProgress() {
        Intent intent = new Intent(this,MyProgressActivity.class);
        startActivity(intent);
    }

    private void Settings() {
        Intent intent = new Intent(this, SettingsActivity.class);
        startActivity(intent);
    }

}

DataBaseHelper:

package com.example.inzynierka;

import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.SQLException;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import android.widget.TextView;

import androidx.annotation.Nullable;

public class DatabaseHelper extends SQLiteOpenHelper {
    public static final String DATABASE_NAME="register.db";
    public static final String TABLE_NAME="registeruser";
    public static final String COL_1 ="ID";
    public static final String COL_2 ="username";
    public static final String COL_3 ="mail_address";
    public static final String COL_4 ="password";

    public DatabaseHelper(@Nullable Context context) {
        super(context, DATABASE_NAME,null, 1);
    }

    @Override
    public void onCreate(SQLiteDatabase db) {
        db.execSQL("CREATE TABLE registeruser (ID INTEGER PRIMARY KEY AUTOINCREMENT,username TEXT, mail_address TEXT, password TEXT)");
    }

    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
        db.execSQL("DROP TABLE IF EXISTS " + TABLE_NAME);
        onCreate(db);
    }

    public long addUser(String user, String password, String mail_address) {
        SQLiteDatabase db = this.getWritableDatabase();
        ContentValues contentValues = new ContentValues();
        contentValues.put("username", user);
        contentValues.put("password", password);
        contentValues.put("mail_address", mail_address);
        long res = db.insert("registeruser", null, contentValues);
        db.close();
        return res;
    }

        public boolean checkUser(String username, String password)
        {
            String[] columns = {COL_1};
            SQLiteDatabase db = getReadableDatabase();
            String selection = COL_2 + "=?" + " and " + COL_4 + "=?";
            String[] selectionArgs = {username, password};
            Cursor cursor = db.query(TABLE_NAME, columns,selection,selectionArgs,null,null,null);
            int count = cursor.getCount();
            cursor.close();
            db.close();

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

    public String getUsername() throws SQLException {
        String username = "";
        Cursor cursor = this.getReadableDatabase().query(
                TABLE_NAME, new String[] { COL_2 },
                null, null, null, null, null);
        if (cursor.moveToFirst()) {
            do {
                username = cursor.getString(1);
            } while (cursor.moveToNext());
        }
        cursor.close();

        return username;
    }
    }

UserPanel.xml

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:background="@color/lightblue"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".UserPanelActivity">


    <ImageView
        android:id="@+id/avatar"
        android:layout_width="60dp"
        android:layout_height="60dp"
        android:layout_marginStart="16dp"
        android:layout_marginLeft="16dp"
        android:layout_marginTop="16dp"
        android:contentDescription="@string/avatar_description"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent"
        app:srcCompat="@drawable/kulfon"
        tools:srcCompat="@drawable/kulfon" />

    <TextView
        android:id="@+id/nickname"
        android:layout_width="120dp"
        android:layout_height="25dp"
        android:layout_marginStart="8dp"
        android:layout_marginLeft="8dp"
        android:text="@string/username"
        app:layout_constraintBottom_toBottomOf="@+id/avatar"
        app:layout_constraintStart_toEndOf="@+id/avatar" />

    <TextView
        android:id="@+id/rank"
        android:layout_width="80dp"
        android:layout_height="25dp"
        android:layout_marginStart="16dp"
        android:layout_marginLeft="16dp"
        android:layout_marginTop="8dp"
        android:text="@string/rank"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/avatar" />

    <Button
        android:id="@+id/progress_button"
        android:layout_width="136dp"
        android:layout_height="70dp"
        android:layout_marginTop="160dp"
        android:text="@string/progress"
        app:layout_constraintEnd_toStartOf="@+id/challenge_button"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent" />

    <Button
        android:id="@+id/challenge_button"
        android:layout_width="136dp"
        android:layout_height="70dp"
        android:layout_marginStart="136dp"
        android:layout_marginLeft="136dp"
        android:layout_marginTop="160dp"
        android:text="@string/challenge"
        app:layout_constraintEnd_toStartOf="@+id/settings_user_panel_button"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent" />

    <Button
        android:id="@+id/settings_user_panel_button"
        android:layout_width="136dp"
        android:layout_height="70dp"
        android:layout_marginStart="272dp"
        android:layout_marginLeft="272dp"
        android:layout_marginTop="160dp"
        android:text="@string/settings_user_panel"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent" />

    <Button
        android:id="@+id/premium_button"
        android:layout_width="136dp"
        android:layout_height="70dp"
        android:layout_marginTop="10dp"
        android:text="@string/premium"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintHorizontal_bias="0.49"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/start_freetraining_button" />

    <Button
        android:id="@+id/start_freetraining_button"
        android:layout_width="0dp"
        android:layout_height="120dp"
        android:layout_marginStart="50dp"
        android:layout_marginLeft="50dp"
        android:layout_marginTop="60dp"
        android:layout_marginEnd="50dp"
        android:layout_marginRight="50dp"
        android:text="@string/freetraining_button"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/challenge_button" />

    <Button
        android:id="@+id/logout_button"
        android:layout_width="85dp"
        android:layout_height="35dp"
        android:layout_marginTop="16dp"
        android:layout_marginEnd="16dp"
        android:layout_marginRight="16dp"
        android:text="@string/logout_btn"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintTop_toTopOf="parent" />

</androidx.constraintlayout.widget.ConstraintLayout>

SignInActivity:

package com.example.inzynierka;

import androidx.appcompat.app.AppCompatActivity;

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

import com.facebook.CallbackManager;

public class SignInActivity extends AppCompatActivity {
    private TextView register_text;
    public static CallbackManager callbackManager;
    DatabaseHelper db;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        db = new DatabaseHelper(this);
        callbackManager = CallbackManager.Factory.create();
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_sign_in);

        final EditText usernameEditText = findViewById(R.id.username);
        final EditText passwordEditText = findViewById(R.id.password);
        final Button loginButton = findViewById(R.id.login);
        final ProgressBar loadingProgressBar = findViewById(R.id.loading);
        usernameEditText.requestFocus();
        register_text = findViewById(R.id.register_text);
        String user = usernameEditText.getText().toString();
        register_text.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent registerIntent = new Intent(SignInActivity.this, RegisterActivity.class);
                startActivity(registerIntent);
            }
        });

        loginButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                String user = usernameEditText.getText().toString().trim();
                String pwd = passwordEditText.getText().toString().trim();
                Boolean res = db.checkUser(user,pwd);
                if(res == true)
                {
                    Intent intent = new Intent(SignInActivity.this,UserPanelActivity.class);
                    //intent.putExtra("username",user);
                    startActivity(intent);
                    Toast.makeText(SignInActivity.this,"Welcome " + user + "!", Toast.LENGTH_SHORT).show();
                }
                else
                {
                    Toast.makeText(SignInActivity.this,"There is a problem with singing in!", Toast.LENGTH_SHORT).show();
                    usernameEditText.setText("");
                    passwordEditText.setText("");
                    usernameEditText.requestFocus();
                }

            }
        });
    }
}

Спасибо за помощь! :)

1 Ответ

0 голосов
/ 29 октября 2019

Вы не инициализировали DatabaseHelper db внутри onCreate. Без инициализации вы пытаетесь его использовать. Вот почему вы получаете NullPointerException

DatabaseHelper db = new DatabaseHelper(this);
NickNameText.setText(db.getUsername());

О вашем втором запросе: После успешного входа в систему передайте имя пользователя UserPanelActivity через намерение.

Intent intent = new Intent(SignInActivity.this,UserPanelActivity.class);
intent.putExtra("username",user);
startActivity(intent);

ЗатемUserPanelActivity 'onCreate получите это имя пользователя и установите для него NickNameText. Нет необходимости доступа db здесь.

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

    String usrename = getIntent().getStringExtra("username");

    NickNameText =  findViewById(R.id.nickname);
    NickNameText.setText(usrename);

    ...
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...