我必须将驱动程序的当前位置上传到具有登录驱动程序 Uid 的busid(“1”或“2”)节点。但是,问题是它总是将位置上传到节点“1”,即使 Uid 存在于节点“2”下。我需要帮助来查找哪个节点(“1”或“2”)将 Uid 作为子节点。
int totalbusno = 2;
String driverbusid = "1";
mDatabaseReference = FirebaseDatabase.getInstance().getReference();
busReference = mDatabaseReference.child("Busno");
lat = location.getLatitude();
lon = location.getLongitude();
mUser = FirebaseAuth.getInstance().getCurrentUser();
assert mUser != null;
userid = mUser.getUid();
busReference.addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
for(int i = 1; i <= totalbusno; i++){
for(DataSnapshot ds : dataSnapshot.getChildren()){
if(ds.child(String.valueOf(i)).hasChild(userid)){
driverbusid = String.valueOf(i);
break;
}
}
}
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
Submitdriverlocation submitdriverlocation = new Submitdriverlocation(lat, lon);
mDatabaseReference.child("Busno").child(driverbusid).child(userid).child("location").setValue(submitdriverlocation).addOnCompleteListener(new OnCompleteListener<Void>() {
@Override
public void onComplete(@NonNull Task<Void> task) {
if(task.isSuccessful()){
Toast.makeText(DriverMapsActivity.this, "Location Updated", Toast.LENGTH_SHORT).show();
}
else{
Toast.makeText(DriverMapsActivity.this, "Update Failed", Toast.LENGTH_SHORT).show();
}
}
});
最佳答案
您有驱动程序 ID 的常量值,请在代码顶部检查其 String driverbusid = "1";
这就是为什么您的数据始终使用键 1 推送到节点上的原因。
// This will always refer to node with key 1
mDatabaseReference.child("Busno").child(driverbusid)
并更新您的 for
循环。
for(int i = 1; i < totalbusno + 1; i++)
您的 for
循环应该执行下一个值,即 2。
关于java - 数据上传到错误的节点。代码有什么问题吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45521281/