将具有相同 uid 的多个数据保存到 Firebase 数据库
Save multiple data with same uid to Firebase database
我在 Android Studio 开发一个应用程序,该应用程序使用 Firebase 登录并将数据存储到其实时数据库中。
我使用的是默认的 firebase 数据库规则,因此只有经过身份验证的用户才能在数据库中 write/read。
我有一个 activity (AddMarker),它将两个 editText 值和一个 LatLong 值(这个来自另一个 activity)保存到数据库。
该代码实际上正在运行,我可以看到以这种方式存储在其中的数据:
DB structure
问题是每次我保存(在 AddMarker Activity 中)时,链接到该 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 中创建一个嵌套结构。并相应地设置值。
databaseReference.child(user.getUid()).push().setValue(markerInfo);
这将使用您的多个数据在 singleUserId 下创建子项
我在 Android Studio 开发一个应用程序,该应用程序使用 Firebase 登录并将数据存储到其实时数据库中。 我使用的是默认的 firebase 数据库规则,因此只有经过身份验证的用户才能在数据库中 write/read。
我有一个 activity (AddMarker),它将两个 editText 值和一个 LatLong 值(这个来自另一个 activity)保存到数据库。 该代码实际上正在运行,我可以看到以这种方式存储在其中的数据: DB structure
问题是每次我保存(在 AddMarker Activity 中)时,链接到该 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 中创建一个嵌套结构。并相应地设置值。
databaseReference.child(user.getUid()).push().setValue(markerInfo);
这将使用您的多个数据在 singleUserId 下创建子项