2017-12-19 5 views
0

Ich habe versucht, zu oft aktualisieren, aber nicht funktioniert diesen Code .Wie bestimmte Felder in Firebase-Datenbank zu aktualisieren, die hierWie Feuerbasis Datenbank Werte

in Struktur erwähnt wird, ist meine Struktur:

Blog 
-LOkCTZQtuMIPT_c9ESK 
    desc: "wow" 
    id: "-LOkCTZQtuMIPT_c9ESK" 
    image:"firebase image" 
    title:"gh" 
    uid:"6757576gfgHh6" 

Also, wie kann ich diese bestimmte Felder nur mit Hilfe von id die DESC, Bild, Titel aktualisieren

Hier ist mein Code:

mCurrentUser = mAuth.getCurrentUser(); 

    mDatabase = FirebaseDatabase.getInstance().getReference().child("Blog"); 

    mDatabaseUser = FirebaseDatabase.getInstance().getReference().child("users").child(mCurrentUser.getUid()); 

private void startPosting() { 

    mProgress.setMessage("Posting..."); 

    final String title_val = mPostTitle.getText().toString().trim(); 
    final String desc_val = mNameFieldUpdate.getText().toString().trim(); 
    if (!TextUtils.isEmpty(title_val) && !TextUtils.isEmpty(desc_val) && mImageUri != null) { 

     mProgress.show(); 

     final StorageReference filepath = mStorage.child("Blog_Images").child(mImageUri.getLastPathSegment()); 
     filepath.putFile(mImageUri).addOnSuccessListener(new OnSuccessListener<UploadTask.TaskSnapshot>() { 
      @Override 
      public void onSuccess(UploadTask.TaskSnapshot taskSnapshot) { 
       @SuppressWarnings("VisibleForTests") 
       final Uri downloadUri = taskSnapshot.getDownloadUrl(); 

       final String id = mDatabase.getKey(); 

       mDatabaseUser.addValueEventListener(new ValueEventListener() { 
        @Override 
        public void onDataChange(DataSnapshot dataSnapshot) { 


         mDatabase.child(id).child("title").setValue(title_val); 
         mDatabase.child(id).child("desc").setValue(desc_val); 
         mDatabase.child(id).child("image").setValue(downloadUri.toString()); 
         mProgress.dismiss(); 

         Intent mainIntent = new Intent(Update_Post.this, Main2Activity.class); 
         mainIntent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); 
         startActivity(mainIntent); 
         finish(); 

        } 

        @Override 
        public void onCancelled(DatabaseError databaseError) { 

        } 
       }); 
+0

wird das Foto hochgeladen? – cutiko

+0

yep alles wird hochgeladen, aber es erstellt neuen Beitrag jetzt überschreibt den Beitrag – user9119525

+0

Ist, weil Sie den Schlüssel aus dem Blog bekommen, instaed, um den Schlüssel aus dem Blog Kind – cutiko

Antwort

0

Sie verwenden getKey() in Ihrer Basis-Blog-DB-Referenz (/ Blog). Sie müssen einen neuen Knoten innerhalb dieser Referenz mit push() und dann getKey() auf Ihrem neu erstellten Kind erstellen.

final String id = mDatabase.push().getKey();

+0

Erneut schafft es neue Post funktioniert nicht – user9119525

0

tun:

DatabaseReference ref = FirebaseDatabase.getInstance().getReference().child("Blog");  
ref.addListenerForSingleValueEvent(new ValueEventListener(){ 
    @Override 
    public void onDataChange(DataSnapshot dataSnapshot){ 
     for(DataSnapshot data: dataSnapshot.getChildren()){ 
      String uid=data.child("uid").getValue().toString(); 
      if(uid.equals((mCurrentUser.getUid()){ 
      String keyid=data.getKey(); 
      ref.child(keyid).child("title").setValue(newtitle); 
      ref.child(keyid).child("image").setValue(newurl); 
      ref.child(keyid).child("desc").setValue(newdesc); 
      } 
    } 
    } 

den Standort des Hörers an child("Blog") und dann in der es durchlaufen und den Schlüssel erhalten, die keyid ist. Um die Werte zu aktualisieren, zeigen Sie sie einfach an die richtige Position und aktualisieren Sie sie.

+0

hey Peter Ich habe E-Mail-Auth für das Posten von Daten von Auth-Benutzern verwendet, so denke ich, dass diese Zeile erforderlich ist mDatabaseUser = FirebaseDatabase.getInstance () .getReference(). child ("Benutzer"). child (mCurrentUser.getUid()); – user9119525

+0

nicht direkt in diesem Code keyid akzeptieren mDatabaseUser = FirebaseDatabase.getInstance(). GetReference(). Kind ("Blog"). Kind (key_id_here); – user9119525

+0

ya ich weiß, ich habe ID hier anstelle von key_id_here wie erwähnt verwendet, aber nicht das Problem zu lösen – user9119525

Verwandte Themen