在onStart中设置后,变量值将变为空

时间:2018-12-07 03:30:15

标签: android firebase-realtime-database

我尝试使用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。有什么解决办法吗?

1 个答案:

答案 0 :(得分:1)

此代码有一些概念上的错误。 首先,在onCreate()之前调用onStart(),也就是说,首先调用onCreate(),然后才调用onStart()。 其次,fSaldo = (String) singleSnapshot.child("saldoUser").getValue();位于onDataChanged内部,因此我们不知道何时调用该方法以及何时设置该值,它是异步的。但这没关系,因为您需要先修复第一个错误。