gpt4 book ai didi

java - 使用 uid 显示当前用户实时数据库中的某些数据

转载 作者:太空宇宙 更新时间:2023-11-04 09:34:38 24 4
gpt4 key购买 nike

我尝试了很多方法,包括重新排列子位置,但仍然不起作用。我想在主页上使用 uid 显示实时数据库中的 BMI,但 TextView 中的值仍然为空。任何人请帮助我,因为我还是 firebase 的新手。

额外信息:BMI 值是根据之前的 Activity 计算得出的。

this is my structure from firebase

my current output

what i want

这是主页 Activity :

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) {

}
});
}

这是上一个 Activity 的代码:

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

}

尝试了很多方法,还是不行。

最佳答案

您正在将监听器附加到:

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,它不存在。

要解决此问题,请从 onDataChange 中删除 child("bmi"):

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

关于java - 使用 uid 显示当前用户实时数据库中的某些数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56657974/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com