gpt4 book ai didi

java - 显示来自 SQLite 数据库 android studio 的用户名

转载 作者:行者123 更新时间:2023-12-01 22:17:36 26 4
gpt4 key购买 nike

我尝试使用这种方法来做到这一点: Android - Display username from sqlite database after login in 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 中显示当前的昵称。

用户面板 Activity :

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);
}

}

数据库助手:

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;
}
}

用户面板.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>

登录 Activity :

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();
}

}
});
}
}

谢谢你的帮助! :)

最佳答案

您没有在 onCreate 中初始化 DatabaseHelper db。如果没有初始化,您将尝试使用它。这就是为什么你会得到 NullPointerException

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

关于您的第二个查询:登录成功后,通过intent将用户名传递给UserPanelActivity

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

然后UserPanelActivityonCreate获取这个用户名并将其设置为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);

...
}

关于java - 显示来自 SQLite 数据库 android studio 的用户名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58614564/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com