Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/201.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 无法使用dataSnapshot从firebase检索数据_Java_Android_Firebase - Fatal编程技术网

Java 无法使用dataSnapshot从firebase检索数据

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

我的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
        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.");
  }
});