我尝试使用user2
方法设置一些变量,但是当涉及onStart()
方法时,它们的值变为空。
这是onCreate()
方法:
onStart()
这是@Override
protected void onStart() {
super.onStart();
Query emailQuery = mDatabase.orderByChild("emailUser").equalTo(emailUser);
emailQuery.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
for(DataSnapshot singleSnapshot : dataSnapshot.getChildren()){
fSaldo = (String) singleSnapshot.child("saldoUser").getValue();
fHeaderName = (String) singleSnapshot.child("username").getValue();
fHeaderMail = (String) singleSnapshot.child("emailUser").getValue();
phone = (String) singleSnapshot.child("phone").getValue();
Log.d("Cozmo", "Saldo: " + fSaldo); //output: not_null
}
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
}
});
}
方法:
onCreate()
这是我完整的MainActivity.class:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
FirebaseAuth fAuth = FirebaseAuth.getInstance();
FirebaseUser user = fAuth.getCurrentUser();
emailUser = user.getEmail();
mDatabase = FirebaseDatabase.getInstance().getReference("Users");
Toolbar toolbar = findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
Log.d("Cozmo", "Saldo: " + fSaldo); //output is null
}
我不理解这些变量再次变为null,并且在经过public class MainActivity extends AppCompatActivity
implements NavigationView.OnNavigationItemSelectedListener {
private String fSaldo, fHeaderName, fHeaderMail, phone;
private String emailUser;
private DatabaseReference mDatabase;
@Override
protected void onCreate(Bundle savedInstanceState) {...}
@Override
protected void onStart() {...}
}
方法行之后变为null。有什么解决办法吗?
答案 0 :(得分:1)
此代码有一些概念上的错误。
首先,在onCreate()
之前调用onStart()
,也就是说,首先调用onCreate()
,然后才调用onStart()
。
其次,fSaldo = (String) singleSnapshot.child("saldoUser").getValue();
位于onDataChanged内部,因此我们不知道何时调用该方法以及何时设置该值,它是异步的。但这没关系,因为您需要先修复第一个错误。