将具有相同 uid 的多个数据保存到 Firebase 数据库



我正在Android Studio开发一款使用Firebase登录并将数据存储到其实时数据库的应用程序。我使用的是默认的 Firebase 数据库规则,因此只有经过身份验证的用户才能在数据库中写入/读取数据。

我有一个活动(AddMarker(,它将两个编辑文本值和一个 LatLong 值(这个来自另一个活动(保存到数据库中。代码实际上正在工作,我可以以这种方式看到存储在其中的数据:数据库结构

问题是每次我保存(在 AddMarker 活动中(时,链接到该 id 的先前数据都会被新数据替换。
相反,我想在数据库中存储具有相同 id 的多个值,例如:数据库结构 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);
        }
    }
}

不能创建两个具有相同 ID 的节点,而是可以在每个 userId 中创建一个嵌套结构。 并相应地设置值,如下所示。

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

这将在单个用户 ID 下创建包含多个数据的子项

欲了解更多信息,您可以参考这个

相关内容

  • 没有找到相关文章

最新更新