2017-04-15 62 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

相关问题