2017-11-06 3 views
0

database ruleswie in der Eltern-Kind-

my database

Ich habe ein Problem mit dem Schreiben von Daten in Firebase Datenbank Zahl von Kind bekommen Es muss eine ID geben für die Daten Methode postID() verwenden Manchmal sein geben Sie mir eine richtige ID und ein anderes Mal falsch id oder updata Daten in einer ID generiert wurde

die ID wie dies für alle Benutzer Beitrag sein muss

[user1]

postId1

postId2

postId3

postId4

postId5

.

.

postId100000


[benutzer2]

postId1

postId2

postId3

postId4

p ostId5 .

.

postId100000

......................................... ...............................

 if (auth.getCurrentUser() != null) { 


      mDatabase.child("AdUsersINFO").child(auth.getCurrentUser().getUid()).child(POSTID).setValue(adver, 
        new DatabaseReference.CompletionListener() { 
         @Override 
         public void onComplete(DatabaseError databaseError, DatabaseReference databaseReference) { 
          if (databaseError == null) { 


           Toast.makeText(getContext(), "Data is saved successfully", Toast.LENGTH_LONG).show(); 

          } else { 

           Toast.makeText(getContext(), "Data isn,t saved , please try again", Toast.LENGTH_LONG).show(); 
          } 

         } 
        }); 

      mAdUserDatabse = FirebaseDatabase.getInstance().getReference().child("AdUsersINFO").child(auth.getCurrentUser().getUid()).child(POSTID); 
      mAdUserDatabse.addListenerForSingleValueEvent(new ValueEventListener() { 
       @Override 
       public void onDataChange(DataSnapshot dataSnapshot) { 

        mAdUserDatabse.child("userid").setValue(auth.getCurrentUser().getUid()); 
       } 

       @Override 
       public void onCancelled(DatabaseError databaseError) { 

       } 
      }); 


     } 

private void postID() {

DatabaseReference rootRef = FirebaseDatabase.getInstance().getReference().child("AdUsersINFO"); 
    rootRef.addListenerForSingleValueEvent(new ValueEventListener() { 
     @Override 
     public void onDataChange(DataSnapshot snapshot) { 
      if (snapshot.hasChild(auth.getCurrentUser().getUid())) { 
       // run some code 

       mAdUserDatabse = FirebaseDatabase.getInstance().getReference().child("AdUsersINFO"); 
       mAdUserDatabse.addListenerForSingleValueEvent(new ValueEventListener() { 
        @Override 
        public void onDataChange(DataSnapshot dataSnapshot) { 
         for (DataSnapshot snap : dataSnapshot.getChildren()) { 
          Log.e(snap.getKey(), snap.getChildrenCount() + ""); 

          if (snap.getChildrenCount() != 0) { 

           postId = "postId" + String.valueOf(snap.getChildrenCount() + 1); 
           SharedPreferencesUtils.setStringPreference(getActivity(), "postId", postId); 

          } else { 
           postId = "postId" + String.valueOf(1); 
           SharedPreferencesUtils.setStringPreference(getActivity(), "postId", postId); 
          } 


         } 

        } 

        @Override 
        public void onCancelled(DatabaseError databaseError) { 

        } 
       }); 
      } else { 
       postId = "postId" + String.valueOf(1); 
       SharedPreferencesUtils.setStringPreference(getActivity(), "postId", postId); 
      } 
     } 

     @Override 
     public void onCancelled(DatabaseError databaseError) { 

     } 
    }); 

} 

bitte speichern Sie mein Leben

+0

zu bekommen, was Sie tun wollen in deiner Ausgabe haben?Bitte antworten Sie mit @AlexMamo –

Antwort

0

Sie laufen eine Schleife und überschreiben Wert von postId wieder ein Und wieder ist die postId gleich der Anzahl der letzten Kind. So erhalten Sie immer die postId Zählung für den letzten Benutzer.

haben so einen Blick wieder auf dem Teil

for (DataSnapshot snap : dataSnapshot.getChildren()) { 
         Log.e(snap.getKey(), snap.getChildrenCount() + ""); 

         if (snap.getChildrenCount() != 0) { 

          postId = "postId" + String.valueOf(snap.getChildrenCount() + 1); 
          SharedPreferencesUtils.setStringPreference(getActivity(), "postId", postId); 

         } else { 
          postId = "postId" + String.valueOf(1); 
          SharedPreferencesUtils.setStringPreference(getActivity(), "postId", postId); 
         } 


        } 

für separate Taste Betrachten jeden Benutzer postId oder eine Funktion machen Schlüssel für einen Benutzer so etwas wie diese

public void getPostId(String userId) { 
    final String postId = "post"; 
    DatabaseReference rootRef = FirebaseDatabase.getInstance().getReference().child("AdUsersINFO").child(userId); 
    rootRef.addListenerForSingleValueEvent(new ValueEventListener() { 
     @Override 
     public void onDataChange(DataSnapshot snapshot) { 
      long c = snapshot.getChildrenCount(); 
      if(c==) postId = postId+"1"; 
      else postId = postId+ c+1; 
     }, 

     @Override 
     public void onCancelled(DatabaseError databaseError) { 

     } 
    }); 
}; 
+1

thax um Hilfe :) –