Java 无法使用dataSnapshot从firebase检索数据
我的Firebase数据库如上图所示 我正在尝试为'alind'检索'a'的值,类似地,为另一个子节点'kartik'检索'a'的值 我正在使用Android Studio。 但是我收到了这个错误-Java 无法使用dataSnapshot从firebase检索数据,java,android,firebase,Java,Android,Firebase,我的Firebase数据库如上图所示 我正在尝试为'alind'检索'a'的值,类似地,为另一个子节点'kartik'检索'a'的值 我正在使用Android Studio。 但是我收到了这个错误- java.lang.NullPointerException: Attempt to invoke virtual method 'boolean java.lang.String.equals(java.lang.Object)' on a null object reference
java.lang.NullPointerException: Attempt to invoke virtual method 'boolean java.lang.String.equals(java.lang.Object)' on a null object reference
at com.example.minorproject.facultyfreeslots.matchslots(facultyfreeslots.java:119)
at com.example.minorproject.facultyfreeslots$1.onClick(facultyfreeslots.java:48)
at android.view.View.performClick(View.java:6614)
我已经尝试使用Datasnapshot设置不同的路径来访问它
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_facultyfreeslots);
t1=findViewById(R.id.textView50);
name=findViewById(R.id.editText4);
name2=findViewById(R.id.editText5);
b1=findViewById(R.id.button9);
day=findViewById(R.id.spinner18);
time=findViewById(R.id.spinner19);
FirebaseApp.initializeApp(this);
d1= FirebaseDatabase.getInstance().getReference("teacher");
b1.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
matchslots();
}
});
}
由于onDataChange是异步的,因此必须执行以下操作:
d1.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
dvalue1=dataSnapshot.child(name11).child(daystring).child(timestring1).getValue().toString().trim();
dvalue2=dataSnapshot.child(name12).child(daystring).child(timestring1).getValue().toString().trim();
if(dvalue1.equals("no class"))
{
a=0;
}
else
{
a=1;
}
if(dvalue2.equals("no class"))
{
b=0;
}
else
{
b=1;
}
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
Log.d(TAG, "Failed to read value.");
}
});
侦听器之后的代码在检索所有数据之前运行,因此您得到的错误是dvalue1为null。我必须做什么更改?我是Android新手,所以有疑问。你需要检查dvalu1是否等于onDataChange内部没有类,而不是外部。它不是重复的,问题是firebase。甚至远程都没有。这是一个比赛条件,仍然是重复的。
d1.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
dvalue1=dataSnapshot.child(name11).child(daystring).child(timestring1).getValue().toString().trim();
dvalue2=dataSnapshot.child(name12).child(daystring).child(timestring1).getValue().toString().trim();
if(dvalue1.equals("no class"))
{
a=0;
}
else
{
a=1;
}
if(dvalue2.equals("no class"))
{
b=0;
}
else
{
b=1;
}
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
Log.d(TAG, "Failed to read value.");
}
});