我设计了一个应用,该应用可从Firebase服务器检索用户的数据。但是Java代码无法从实时数据库中检索用户的详细信息。
引发的错误是以下几行收到了NullPointer
。
User userDashboard = dataSnapshot.getValue(User.class);
USERNAME.setText(userDashboard.getName().toString().trim());
PASSWORD.setText(userDashboard.getPassword().toString().trim());
EMAIL.setText(userDashboard.getEmail().toString().trim());
下面是Java代码。
package com.example.loginuiapp;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.view.Window;
import android.view.WindowManager;
import android.widget.Button;
import android.widget.TextView;
import android.widget.Toast;
import androidx.annotation.NonNull;
import androidx.appcompat.app.AppCompatActivity;
import com.google.firebase.auth.FirebaseAuth;
import com.google.firebase.database.DataSnapshot;
import com.google.firebase.database.DatabaseError;
import com.google.firebase.database.DatabaseReference;
import com.google.firebase.database.FirebaseDatabase;
import com.google.firebase.database.ValueEventListener;
public class UserDashboard extends AppCompatActivity {
Button btnLogout;
private TextView USERNAME, PASSWORD, EMAIL;
private FirebaseAuth firebaseAuth;
private FirebaseDatabase firebaseDatabase;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// MAKING THE APP FULLSCREEN. KINDLY DO NOT DELETE THE BELOW LINES WITHOUT PRIOR KNOWLEDGE
requestWindowFeature(Window.FEATURE_NO_TITLE);
getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
WindowManager.LayoutParams.FLAG_FULLSCREEN);
setContentView(R.layout.activity_user_dashboard);
USERNAME = findViewById(R.id.display_username);
PASSWORD = findViewById(R.id.display_usr_password);
EMAIL = findViewById(R.id.display_usr_email);
firebaseAuth = FirebaseAuth.getInstance();
firebaseDatabase = FirebaseDatabase.getInstance();
DatabaseReference databaseReference = firebaseDatabase
.getReference(firebaseAuth.getUid());
databaseReference.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {/*
User userDashboard = dataSnapshot.getValue(User.class);
USERNAME.setText(userDashboard.getName().toString().trim());
PASSWORD.setText(userDashboard.getPassword().toString().trim());
EMAIL.setText(userDashboard.getEmail().toString().trim());*/
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
Toast.makeText(UserDashboard.this, "Database Error", Toast.LENGTH_LONG).show();
}
});
// Handling the Logout action when the logout button is clicked.
btnLogout = findViewById(R.id.logout_button);
btnLogout.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
FirebaseAuth.getInstance().signOut();
// Read this thread to know what's happening
// https://stackoverflow.com/questions/53334017/back-button-will-bring-to-home-page-after-firebase-logout-on-app
Intent intent = new Intent(UserDashboard.this, MainActivity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK
| Intent.FLAG_ACTIVITY_CLEAR_TOP
| Intent.FLAG_ACTIVITY_CLEAR_TASK);
startActivity(intent);
finish();
Toast.makeText(UserDashboard.this, "Successfully Logged Out!", Toast.LENGTH_LONG).show();
}
});
}
}
谢谢您的帮助!
答案 0 :(得分:1)
在“数据库参考”中,请确保您拥有正确的路径以获取要检索的数据,例如
DatabaseReference ref = FirebaseDatabase.getInstance().getReference().child("your/path/to/data");
ref.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
//making sure snapshot consists some data
if (dataSnapshot.exists()) {
//do your stuff
User userDashboard = dataSnapshot.getValue(User.class);
USERNAME.setText(userDashboard.getName().toString().trim());
PASSWORD.setText(userDashboard.getPassword().toString().trim());
EMAIL.setText(userDashboard.getEmail().toString().trim());
}
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
Toast.makeText(UserDashboard.this, "Database Error", Toast.LENGTH_LONG).show();
}
});