2017-09-25 11 views
1

firebaseクエリから子カウントを取得するにはどうすればよいですか。たとえば、私が10子を持つデータベースクエリを使用しているとしたら、onChildChangedを使用し、スナップショットから値を取得しようとしたが、その値を取得する方法はありますが、うまくいきません。これは、最初に番号を取得してから継続的に同期する必要があるため、再度照会しますが、2番目の照会で実際の子変更がないため、元の正しい値を置き換えるゼロの値を返します。 :/Firebaseの子カウントの取得

databaseReference.child("PrinterView").child(uni).child(phone).orderByChild("done").equalTo("No").addChildEventListener(new ChildEventListener() { 
     @Override 
     public void onChildAdded(DataSnapshot dataSnapshot, String s) { 
      Toast.makeText(getActivity(),"Number:"+String.valueOf(dataSnapshot.getChildrenCount()),Toast.LENGTH_LONG).show(); 

     } 

     @Override 
     public void onChildChanged(DataSnapshot dataSnapshot, String s) { 

     } 

     @Override 
     public void onChildRemoved(DataSnapshot dataSnapshot) { 

     } 

     @Override 
     public void onChildMoved(DataSnapshot dataSnapshot, String s) { 

     } 

     @Override 
     public void onCancelled(DatabaseError databaseError) { 

     } 
    }); 

両方

databaseReference.child("PrinterView").child(uni).child(phone).orderByChild("done").equalTo("No").addValueEventListener(new ValueEventListener() { 
     @Override 
     public void onDataChange(DataSnapshot dataSnapshot) { 
      Toast.makeText(getActivity(),"Number:"+String.valueOf(dataSnapshot.getChildrenCount()),Toast.LENGTH_LONG).show(); 
      Vendor_view_Home_fragment.printIndicator.setText(String.valueOf(dataSnapshot.getChildrenCount())); 
     } 

     @Override 
     public void onCancelled(DatabaseError databaseError) { 

     } 
    }); 

enter image description here

enter image description here

+0

いくつかのコードを教えてください。 –

+0

https://stackoverflow.com/a/37601712/5065318この回答を参照して、ご意見があれば教えてください。基本的に子供の中にあなたは子供のカウントを取得する必要があります。 –

+0

あなたとあなたのデータベース構造を共有してください。子変更の –

答えて

2

PrinterViewあなたFirebaseルートの直接の子であると仮定すると動作しません、次のコードを使用してください:

DatabaseReference rootRef = FirebaseDatabase.getInstance().getReference(); 
DatabaseReference yourRef = rootRef.child("PrinterView").child("Covenant University").child("588"); 
Query query = yourRef.orderByChild("done").equalTo("No"); 
ValueEventListener eventListener = new ValueEventListener() { 
    @Override 
    public void onDataChange(DataSnapshot dataSnapshot) { 
     long count = dataSnapshot.getChildrenCount(); 
     Log.d("TAG", count); 
    } 

    @Override 
    public void onCancelled(DatabaseError databaseError) {} 
}; 
query.addListenerForSingleValueEvent(eventListener); 
+0

だから、このコードは私が問題を見つけ出すために使用したもので、動作しますが、問題は解決しません。私は以下の問題を解決するものを書いた。ありがとう:) –

0

問題は、この行だった:私はそう

databaseReference.child("PrinterView").child(uni).child(phone).orderByChild("done").equalTo("No").addValueEventListener(new ValueEventListener() 

変数「UNI」と「電話」をもfirebaseクエリEGによって提供されたそれは、大学を得ることだったと現在のユーザーの電話番号そこに静的な文字列を置くことはできませんでした。

databaseReference.child("Users").child(mAuth.getCurrentUser().getUid()).child("Phone").addValueEventListener(new ValueEventListener() { 
     @Override 
     public void onDataChange(DataSnapshot dataSnapshot) { 
      phone = dataSnapshot.getValue().toString(); 
      // Toast.makeText(getActivity(), phone, Toast.LENGTH_LONG).show(); 
      setPendingList(); 
     } 

     @Override 
     public void onCancelled(DatabaseError databaseError) { 

     } 
    }); 

だから、問題はネットワーク接続が遅かったか、クエリがまだ行われていなかった場合、これら2つの変数は、それによってdataSnapshotが空になって空であるならば、ということでした。私はそれを並べ替える必要がありますが、残りの部分が確実に実行されたときにそれを照会できるようにするだけです。 :)

関連する問題