java - 数据上传到错误的节点。代码有什么问题吗?

标签 java android firebase firebase-realtime-database

我必须将驱动程序的当前位置上传到具有登录驱动程序 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();
        }
    }
});

Database Structure

最佳答案

您有驱动程序 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/

相关文章:

Android:当动画在画廊中停止时,如何将低质量图像更改为高质量图像?

android - 处理请求时出错 (Azure)

javascript - Cloud Functions for Firebase onWrite 触发器 : snapshot. val 不是函数

java - 从列表中删除重复元素

java - 从 OCR 识别的文本中提取信息

java - 如何让服务器运行我的java程序?

javascript - 向 d3 条形图添加标签

java - 我如何制作一个带有“字符”的字符串?(Java)

android - 为什么opencv的降噪功能不起作用

node.js - 如何查询 Firestore 今天所有文档的日期?