2017-04-15 2 views
0

Je travaille dans Android Studio sur une application qui utilise Firebase pour se connecter et stocker des données dans sa base de données en temps réel. J'utilise les règles de base de données Firebase par défaut, donc seuls les utilisateurs authentifiés peuvent écrire/lire dans la base de données.Enregistrer plusieurs données avec la même base de données uid to Firebase

J'ai une activité (AddMarker) qui enregistre deux valeurs editText et une valeur LatLong (celle-ci d'une autre activité) dans la base de données. Le code fonctionne vraiment et je peux voir les données qui y sont stockées ainsi: DB structure

Le problème est que chaque fois que je sauverai (dans AddMarker activité), les données antérieures liées à cet identifiant, sera remplacé par le nouveau un.
Au lieu de cela, je voudrais stocker dans la base de plusieurs valeurs avec le même identifiant comme celui-ci par exemple: DB structure 2

Ceci est mon code

public class AddMarker extends AppCompatActivity implements View.OnClickListener { 

    //Save flag 
    public static boolean isSaved; 

    //Database 
    private DatabaseReference databaseReference; 
    FirebaseAuth firebaseAuth; 
    private FirebaseAuth mAuth; 

    //UI 
    private EditText tipo, marca; 
    private Button saveMarker; 

    public LatLng ll; 


    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_add_marker); 

     //DB 
     mAuth = FirebaseAuth.getInstance(); 
     databaseReference = FirebaseDatabase.getInstance().getReference(); 


     //Initialize views 
     tipo = (EditText) findViewById(R.id.type); 
     marca = (EditText) findViewById(R.id.specInfo); 
     saveMarker = (Button) findViewById(R.id.save_btn); 

     //Initialize isSaved 
     isSaved = false; 

     //Set button listener 
     saveMarker.setOnClickListener(this); 

     //get Position 
     ll = getIntent().getParcelableExtra("POSITION"); 

    } 

    private MarkerOptions saveMarkerInfo(){ 

     String tipo_str = tipo.getText().toString().trim(); 
     String marca_str = marca.getText().toString().trim(); 
     LatLng pos = ll; 

     MarkerInfo markerInfo = new MarkerInfo(tipo_str,marca_str, pos); 

     FirebaseUser user = FirebaseAuth.getInstance().getCurrentUser(); 


     MarkerOptions marker = new MarkerOptions() 
       .position(ll) 
       .anchor(0.0f, 1.0f) 
       .title("prova") 

     //Add data to DB 
     databaseReference.child(user.getUid()).setValue(markerInfo); 


     Toast.makeText(this,"infos saved",Toast.LENGTH_LONG).show(); 

     finish(); 

     return marker; 
    } 

    @Override 
    public void onClick(View v) { 

     if(v == saveMarker){ 
      isSaved = true; 
      MarkerOptions mo=saveMarkerInfo(); 

      MainActivity.mMap.addMarker(mo); 

     } 

    } 
} 

Répondre

1

vous ne pouvez pas créer deux nœuds avec la même Id au lieu que vous pouvez créer une structure imbriquée dans chaque ID utilisateur. et setValues ​​en conséquence comme ceci.

databaseReference.child(user.getUid()).push().setValue(markerInfo); 

cela va créer Childs sous singleUserId avec vos données multiples

pour plus you can refer this

+0

Merci! J'ai résolu mon problème en utilisant l'uid Push, mais votre solution m'aidera beaucoup à l'avenir pour d'autres projets. – Reyd