我想在on create方法之外的内部类中重写一个全局变量。
public class MainMenuActivity extends FragmentActivity {
String user_type;
@Override
protected void onCreate(Bundle savedInstanceState) {
user_type="collion";
result();
//print user_type
}
private void result(){
ValueEventListener valueEventListener = new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
if(!getData(dataSnapshot)){
user_type="vendor";
inti(user_type);
result();
}
}
@Override
public void onCancelled(DatabaseError databaseError) {}
};
uidRef.addListenerForSingleValueEvent(valueEventListener);
}
}
但是它仍然导致user_type冲突而不是供应商。请帮助我
答案 0 :(得分:1)
根据您在result()
方法中的代码,您添加了ValueEventListener
,我想这是来自 Firebase 的。这是 异步调用 ,因此,除了调用result()方法后,public void onDataChange(DataSnapshot dataSnapshot)
方法将立即被调用是不可能的。
这将异步发生,因此当您尝试在调用result()方法后打印user_type
字段时,旧值将被打印,因为新值尚未更新。
最后,
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
if(!getData(dataSnapshot)){
user_type="vendor";
inti(user_type);
result();
}
}
由于此方法不会被同步调用,因此不会立即更新该字段,因此print语句将打印该字段中的原始数据
答案 1 :(得分:0)
只需使用MainMenuActivity.user_type = "vendor" inside the inner class
,这样代码就知道您正在引用MainMenuActivity类成员。