簡體   English   中英

使用相同的uid將多個數據保存到Firebase數據庫

[英]Save multiple data with same uid to Firebase database

我在Android Studio上使用Firebase登錄並將數據存儲到其實時數據庫的應用程序上工作。 我使用的是默認的Firebase數據庫規則,因此只有經過身份驗證的用戶才能在數據庫中進行寫入/讀取。

我有一個活動(AddMarker),該活動將兩個editText值和一個LatLong值(另一個活動中的這個值)保存到數據庫中。 該代碼實際上正在工作,我可以通過以下方式查看其中存儲的數據: DB結構

問題是每次我保存(在AddMarker活動中)時,鏈接到該ID的先前數據都會被新ID替換。
相反,我想在數據庫中存儲多個具有相同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);

        }

    }
}

您不能創建具有相同ID的兩個節點,而是可以在每個userId內創建嵌套結構。 和setValues相應地是這樣的。

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

這將在singleUserId下使用多個數據創建子級

有關更多信息, 您可以參考此

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM