【问题标题】:Insert into firebase real-time database with getuid instead of getkey使用 getuid 而不是 getkey 插入 firebase 实时数据库
【发布时间】:2020-09-29 12:45:16
【问题描述】:

我正在将数据插入 firebase 实时数据库,然后获取数据并将其显示在图表上,但是当我现在插入数据库时​​,我使用独特的 getkey() 方法插入值,但我想使用getuid() 方法,因为用户已经在应用程序中进行了身份验证。我想知道如何将getkey() 更改为使用getuid().

这是我当前的代码:getkey() 方法在setListneners() 方法中

FirebaseDatabase database;
DatabaseReference reference;
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("dd/mm/yyyy");

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_weight); 

    Btn_Display = findViewById(R.id.btn_display);
    graphView = findViewById(R.id.weight_graph);
    series =  new LineGraphSeries();
    graphView.addSeries(series);
    database = FirebaseDatabase.getInstance();
    reference = database.getReference("WeightGraph");

    setListeners();
}

   private void setListeners() {
    Btn_Display.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            String id = reference.push().getKey();
            long x = new Date().getTime();
            int y = Integer.parseInt(weight.getText().toString());

            PointValue pointValue =  new PointValue(x, y);

            reference.child(id).setValue(pointValue);
        }
    });

    graphView.getGridLabelRenderer().setNumHorizontalLabels(2);
    graphView.getGridLabelRenderer().setNumVerticalLabels(2);

    graphView.getGridLabelRenderer().setLabelFormatter(new DefaultLabelFormatter(){
        @Override
        public String formatLabel(double value, boolean isValueX) {
            if(isValueX){
                return simpleDateFormat.format(new Date((long) value));
            }else{
                return super.formatLabel(value, isValueX);
            }
        }
    });
}


@Override
protected void onStart() {
    super.onStart();

    reference.addValueEventListener(new ValueEventListener() {
        @Override
        public void onDataChange(@NonNull DataSnapshot snapshot) {
            DataPoint[] dataPoints = new DataPoint[(int) snapshot.getChildrenCount()];
            int index = 0;

            for(DataSnapshot dataSnapshot : snapshot.getChildren()){
                PointValue pointValue = dataSnapshot.getValue(PointValue.class);

                dataPoints[index] = new DataPoint(pointValue.getxValue(), pointValue.getyValue());
                series.resetData(dataPoints);
            }
        }

        @Override
        public void onCancelled(@NonNull DatabaseError error) {

        }
    });
}

【问题讨论】:

  • FirebaseUser mAuth = FirebaseAuth.getInstance().getCurrentUser();然后 mAuth.getUid();

标签: java android firebase-realtime-database firebase-authentication


【解决方案1】:
@Override
protected void onStart() {
  super.onStart();

  FirebaseUser mAuth = FirebaseAuth.getInstance().getCurrentUser()

  reference.addValueEventListener(new ValueEventListener() {
    @Override
    public void onDataChange(@NonNull DataSnapshot snapshot) {
        DataPoint[] dataPoints = new DataPoint[(int) snapshot.getChildrenCount()];
        int index = 0;

        for(DataSnapshot dataSnapshot : snapshot.getChildren()){
            PointValue pointValue = dataSnapshot.getValue(PointValue.class);

            dataPoints[index] = new DataPoint(pointValue.getxValue(), pointValue.getyValue());
            series.resetData(dataPoints);
        }
    }

    @Override
    public void onCancelled(@NonNull DatabaseError error) {

    }
  });
}

然后就可以获取uid了

mAuth.getUid()

【讨论】:

    【解决方案2】:

    如果你想在用户的 UID 下而不是 push() 生成的密钥下写入数据,你可以这样做:

    String id = FirebaseAuth.getInstance().getCurrentUser().getUid();
    long x = new Date().getTime();
    int y = Integer.parseInt(weight.getText().toString());
    
    PointValue pointValue =  new PointValue(x, y);
    
    reference.child(id).setValue(pointValue);
    

    如果您想为每个用户存储一个点列表,您可以将最后一行更改为:

    reference.child(id).push().setValue(pointValue);
    

    因此,您可以在每个 UID 下获得自动生成(推送)ID 的列表。

    【讨论】:

    • 感谢您,此方法效果很好,但现在,我在将数据从数据库中获取到我的图表时遇到了问题。因为它找不到位置。 get data() 是我上面代码的一部分
    • 我的假设是它无法找到数据,因为图表现在显示为空白
    猜你喜欢
    • 2022-01-06
    • 2022-01-25
    • 2021-08-18
    • 2020-06-04
    • 1970-01-01
    • 2022-01-01
    • 2021-11-07
    • 2021-07-03
    • 1970-01-01
    相关资源
    最近更新 更多