Отображение определенных данных из базы данных RealTime для текущего пользователя с помощью uid - PullRequest
0 голосов
/ 19 июня 2019

Я пробовал много способов, включая перестановку дочернего местоположения, но все еще не работал. Я хочу отображать BMI из базы данных в реальном времени, используя uid на домашней странице, но значение в текстовом представлении все еще равно нулю. Любой, пожалуйста, помогите мне, так как я все еще новичок в пожарной части.

Дополнительная информация: значение ИМТ рассчитывается на основе предыдущего действия.

this is my structure from firebase

мой токовый выход

что я хочу

это HomePage Активность:

public class HomepageUser extends AppCompatActivity {

TextView showBMI;
DatabaseReference myRef;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_homepage_user);
    showBMI = ( TextView) findViewById(R.id.showBMI);

    //Database
    //FirebaseDatabase database = FirebaseDatabase.getInstance();
    myRef = FirebaseDatabase.getInstance().getReference("Users").child(FirebaseAuth.getInstance().getCurrentUser().getUid()).child("bmi");

}
// Read from the database

@Override
protected void onStart() {
    super.onStart();
    myRef.addListenerForSingleValueEvent(new ValueEventListener() {
        @Override
        public void onDataChange(@NonNull DataSnapshot dataSnapshot) {

            String finalBmi = (String)dataSnapshot.child("bmi").getValue();
            showBMI.setText( ("BMI:   " + finalBmi));
        }

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

        }
    });
}

Это код предыдущего действия:

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();

}

Я пробовал много способов, но все еще не работал.

Ответы [ 2 ]

0 голосов
/ 19 июня 2019

Это происходит потому, что я прикрепляю двойную информацию для child / Users / $ uid / bmi / bmi, которая должна быть / Users / $ uid / bmi

, и обратите внимание, что установка текстового представления не может содержать двойную строку, если вы не назначитеим нравится это

String bmi = (String) Double.toString ((Double) dataSnapshot.getValue ());showBMI.setText (("BMI:" + bmi));

0 голосов
/ 19 июня 2019

Вы присоединяете слушателя к:

myRef = FirebaseDatabase.getInstance().getReference("Users").child(FirebaseAuth.getInstance().getCurrentUser().getUid()).child("bmi");

Итак /Users/$uid/bmi.Затем вы читаете значение с помощью:

myRef.addListenerForSingleValueEvent(new ValueEventListener() {
    @Override
    public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
        String finalBmi = (String)dataSnapshot.child("bmi").getValue();
        showBMI.setText( ("BMI:   " + finalBmi));
    }

Итак, в этот момент вы читаете /Users/$uid/bmi/bmi, которого не существует.

Чтобы исправить это, удалите child("bmi") из onDataChange:

myRef.addListenerForSingleValueEvent(new ValueEventListener() {
    @Override
    public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
        String finalBmi = (String)dataSnapshot.getValue();
        showBMI.setText( ("BMI:   " + finalBmi));
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...