【问题标题】:How to display specific data of current user from firebase to new activity?如何将当前用户的特定数据从 firebase 显示到新活动?
【发布时间】:2019-06-18 01:45:49
【问题描述】:

我的代码有问题,我无法将数据(来自先前活动的输入)显示到新活动。

this is my data in the firebase

this is my current output, the BMI is null

what I want is this, the BMI value is not null

这是我当前的 HomepageActivity 代码:

private void viewBMI() {
    FirebaseDatabase database = FirebaseDatabase.getInstance();
    final String uid = FirebaseAuth.getInstance().getCurrentUser().getUid();
    DatabaseReference myRef = database.getReference("Users").child("bmi").child(uid);

    // Read from the database
    myRef.addListenerForSingleValueEvent(new ValueEventListener() {
        @Override
        public void onDataChange(@NonNull DataSnapshot dataSnapshot) {

            String finalBmi = (String) dataSnapshot.getValue();
            showBMI.setText("BMI:  " + String.valueOf(finalBmi));

        }
        @Override
        public void onCancelled(@NonNull DatabaseError error) {
            // Failed to read value
            //Log.w(BMI, "Failed to read value.", error.toException());
        }
    });

这是之前活动的代码:

private void updateBMI(double bmi, final FirebaseUser currentUser) {

    kg = Double.parseDouble(inputKg.getText().toString());
    m = Double.parseDouble(inputM.getText().toString());


    metricFormula = new MetricFormula(kg, m);
    imperialFormula = new ImperialFormula(kg, m);

    //bmi = String.valueOf(TWO_DECIMAL_PLACES.format(metricFormula.computeBMI(metricFormula.getInputKg(),metricFormula.getInputM())));
    bmi = Double.parseDouble(TWO_DECIMAL_PLACES.format(metricFormula.computeBMI(metricFormula.getInputKg(),metricFormula.getInputM())));

    final double finalBmi = bmi;

    mAuth.updateCurrentUser(currentUser).addOnCompleteListener(this, new OnCompleteListener<Void>() {
        @Override
        public void onComplete(@NonNull Task<Void> task) {

            UserProfileChangeRequest profileUpdate = new UserProfileChangeRequest.Builder()
                    .build();

            currentUser.updateProfile(profileUpdate)
                    .addOnCompleteListener(new OnCompleteListener<Void>() {
                        @Override
                        public void onComplete(@NonNull Task<Void> task) {
                            if(task.isSuccessful()){

                                Map<String, Object> values = new HashMap<>();
                                values.put("bmi", finalBmi);

                                FirebaseDatabase.getInstance().getReference("Users")
                                        .child(FirebaseAuth.getInstance().getCurrentUser().getUid())
                                        .updateChildren(values).addOnCompleteListener(new OnCompleteListener<Void>() {
                                    @Override
                                    public void onComplete(@NonNull Task<Void> task) {
                                        //progressBar.setVisibility(View.GONE);
                                        if (task.isSuccessful()) {
                                            //acc successfully registered
                                            showMessage("Account Updated");

                                            updateUI();
                                        }
                                        else{
                                        }
                                    }
                                });

                            }
                        }
                    });
        }
    });

}

//next page
private void updateUI() {

    Intent homepageActivity = new Intent(EditProfileActivity.this,HomepageUser.class);
    //homepageActivity.putExtra("bmi",bmi); //new
    startActivity(homepageActivity);
    finish();

}

【问题讨论】:

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


    【解决方案1】:

    我认为, 您的参考没有正确到达

    DatabaseReference myRef = database.getReference("Users").child("bmi").child(uid);
    

    “用户”下没有子“bmi”

    在您的图像中,您有 用户 -> JKkaSDGLdkM7HxzBKf1ivJ4G6A03 -> bmi...等

    您需要考虑另一层来获取信息。

    【讨论】:

      【解决方案2】:

      您的儿童访问顺序不正确。正如我在 Firebase Child Hierarchy 的图像中看到的那样,您在“userID”下有“bmi”。所以替换

      DatabaseReference myRef = database.getReference("Users").child("bmi").child(uid);
      

      DatabaseReference myRef = database.getReference("Users").child(uid).child("bmi");
      

      由于层次结构是Users->id->bmi(jason对象的一个​​组件)

      【讨论】:

      • 它没有用,我改了之后,应用完全停止了
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-04-22
      • 2018-11-15
      • 1970-01-01
      • 1970-01-01
      • 2019-06-21
      • 1970-01-01
      相关资源
      最近更新 更多