我的Firebase数据库如下所示 我正在尝试为“ alind”以及其他子节点“ 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
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();
}
});
}
void matchslots()
{ // getdata();
name11=name.getText().toString();
name12=name.getText().toString();
daystring=day.getSelectedItem().toString().trim();
timestring=time.getSelectedItem().toString().trim();
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();
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
Log.d(TAG, "Failed to read value.");
}
});
//line119-
if(dvalue1.equals("no class"))
{
a=0;
}
else {
a=1;
}
if(dvalue2.equals("no class"))
{
b=0;
}
else
{
b=1;
I want to get the value of a or b or c. nam11=alind or any othername, daystring="monday"/"tuesday" etc
timestring="a"/"b"/"c" etc
答案 0 :(得分:2)
由于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
为空。