如何在内部类中覆盖全局变量

时间:2018-07-17 19:35:17

标签: android scope global-variables global

我想在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冲突而不是供应商。请帮助我

2 个答案:

答案 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类成员。