android - Android Frebase 用户数据检索
问题描述
我设计了一个从 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();
}
});
}
}
谢谢您的帮助!
解决方案
在您的数据库参考中,确保您拥有正在检索的数据的正确路径,例如
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();
}
});
推荐阅读
- sql - 将 SQL 转换为 Rails 查询
- python - 如何在可移植 Visual Studio 代码中设置可移植 python 路径?
- gtk - 如何防止 Gtk g_source_timeout_add 在多个实例中触发
- sas - 如何标记回归模型?
- spring-kafka - spring-kafka 如何在流 bean 上设置 Retry
- xcode - 无法找到由 `FirebaseUI/Phone` 依赖的`FirebasePhoneAuthUI (~> 11.0)` 的规范
- python-3.x - 安装了poppler,pdf2image路径错误好像没有解决方法。这已经解决了吗?
- java - 对象='customerService' 的验证失败。错误数:2
- javascript - JavaScript 中的接口是什么?
- android - WebView 中视频上方的灰色播放按钮