2017-04-15 129 views
0

我正在使用Firebase登錄並將數據存儲到其實時數據庫的應用程序的Android Studio中工作。 我使用默認的Firebase數據庫規則,因此只有經過身份驗證的用戶可以在數據庫中寫入/讀取。使用同一個uid將多個數據保存到Firebase數據庫

我有一個活動(AddMarker),它將兩個editText值和一個LatLong值(來自另一個活動的這個值)保存到數據庫。 的代碼實際上是工作,我可以通過這種方式查看存儲在它的數據: DB structure

的問題是,每次我保存(在AddMarker活動),連接到該ID之前的數據,得到由新的替換一。
相反,我想在DB多個值來存儲具有相同id像這樣的例子: DB structure 2

這是我的代碼

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); 

     } 

    } 
} 

回答

1

您不能創建ID相同的兩個節點,而不是你可以在每個userId內部創建一個嵌套結構。並像這樣設置值。

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

這將創建與多個數據

更多you can refer this

+0

謝謝singleUserId下的孩子的!我通過使用Push uid解決了我的問題,但您的解決方案將在未來幫助我最終實現其他項目。 – Reyd

相關問題