Android 在onStart中设置后,变量值变为null

Android 在onStart中设置后,变量值变为null,android,firebase-realtime-database,Android,Firebase Realtime Database,我曾尝试使用onStart()方法设置一些变量,但在使用onCreate()方法时,它们的值变为null 这是onStart()方法: @Override protected void onStart() { super.onStart(); Query emailQuery = mDatabase.orderByChild("emailUser").equalTo(emailUser); emailQuery.addValueEventListener(new Val

我曾尝试使用
onStart()
方法设置一些变量,但在使用
onCreate()
方法时,它们的值变为null

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

        }
    });
}
@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
}
这是
onCreate()
方法:

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

        }
    });
}
@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
}
这是我的全部主要活动。课程:

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,并且在传递了
onDataChange()
方法的行之后,它会变为null。有什么解决方案吗?

这段代码在概念上有一些问题。 首先,在
onStart()
之前调用
onCreate()
,也就是说,首先调用
onCreate()
,然后只调用
onStart()

其次,
fSaldo=(String)singleSnapshot.child(“saldoUser”).getValue()
在onDataChanged中,因此我们不知道何时调用该方法以及何时设置该值,它是异步的。但是这并不重要,因为您需要首先修复第一个错误。

onCreate
总是在
onStart
之前调用,因此,很自然,值
fSaldo
将为null,因此onCreate上的调用日志d(“Cozmo”,“Saldo:+fSaldo”)将始终为null,因为尚未获取数据。如果要放置日志,则需要在完成获取后进行回调there@MikeM. 所以如果我在onDataChange()处理数据,这是否无关紧要?