Requirement: I want passWord to be accessible everywhere in the class.
这是代码:
public class DetailComm extends AppCompatActivity {
private String passWord;
private Bundle bundle;
private Button mSendButton;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
bundle = getIntent().getExtras();
mSendButton = (Button) findViewById(R.id.sendButton);
final Query query = mFirebaseDatabaseReference.child(<mylink>).orderByKey().equalTo(<myname>);
query.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot)
{
for (final DataSnapshot snapshot: dataSnapshot.getChildren()) {
passWord = snapshot.getValue().toString();
//Point 1. Toast prints correct value of passWord here//
}
}
@Override
public void onCancelled(DatabaseError databaseError)
{
}
});
if (bundle != null) {
for (String key : bundle.keySet()) {
Toast.makeText(DetailComm.this, passWord.toString(), Toast.LENGTH_SHORT).show();
//Point 2. Toast prints blank output here//
}
}
mSendButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
//Point 3. Toast displays correct value of passWord here!!
}
}
}
}
问题是:如何在第2点无法访问相同的变量?如果在第1点我设置passWord时,它在不同的类中,它可能会解释第2点有空字符串,但是,它是否也应该在点3处不可访问?我错过了什么?
如何在课堂上的任何地方访问passWord?我将其更改为公共变量,Point 2仍显示空值。此外,该类是项目中的众多类之一。我确定没有其他类具有此变量名称。
答案 0 :(得分:0)
您在Listener匿名类中设置值,这意味着变量仅在事件发生时初始化,在您的情况下,FireBase数据库中的数据更改或第一次响应传递时。 但是第2点恰好在你设置了Listener后发生,所以它发生在第1点之前。这就是你给出null值的原因。 而且,此外,第3点也发生在lustener中,所以很不清楚哪个点将被称为第一点 - 第1点或第3点。