Firebase ValueListener第二次或第三次无法运行

时间:2017-04-03 05:19:33

标签: android firebase firebase-realtime-database

在Profile页面中,我设置了一个监听器以保持我的MainActivity.currUser alwyas具有更新的值,并且每个editTextView我都会将代码保存到我的DB中。 问题是当我移动到另一个editTextView时我得到一个错误。

这是我的代码:

    @Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.profile_page);

    // [START initialize_database_ref]
    mDatabase = FirebaseDatabase.getInstance().getReference();
    // [END initialize_database_ref]

    editTextName = (EditText) findViewById(R.id.editTextName);
    editTextAddress = (EditText) findViewById(R.id.editTextAddress); 
....... another findViewById


    listenProfileOnce();

    loadUserClass();


    editTextName.setOnFocusChangeListener(new View.OnFocusChangeListener() {

        public void onFocusChange(View v, boolean hasFocus) {
            if(!hasFocus) {
                if (!editTextName.getText().equals(MainActivity.currUser.getName())) {  //process only if changes occurs
                    //reflect the changes and update the db + current user object
                    MainActivity.currUser.setName(editTextName.getText().toString());
                    mDatabase.child("Users").child(MainActivity.currUser.getUID()).child("name").setValue(MainActivity.currUser.getName());
                }

            }

        }
    });

    editTextAddress.setOnFocusChangeListener(new View.OnFocusChangeListener() {

        public void onFocusChange(View v, boolean hasFocus) {
            if(!hasFocus) {
                if (!editTextAddress.getText().equals(MainActivity.currUser.getAddress())) {  //process only if changes occurs
                    //reflect the changes and update the db + current user object
                    MainActivity.currUser.setAddress(editTextAlamat.getText().toString());
                    mDatabase.child("Users").child(MainActivity.currUser.getUID()).child("address").setValue(MainActivity.currUser.getAddress());
                }

            }

        }
    });

我的听众:

private void listenProfile() {

    mDatabase.child(MainActivity.currUser.getUID()).addValueEventListener(new ValueEventListener() {
        @Override
        public void onDataChange(DataSnapshot dataSnapshot) {
            // Get Post object and use the values to update the UI
            MainActivity.currUser = dataSnapshot.getValue(User.class);
            // ...
        }
           @Override
           public void onCancelled(DatabaseError databaseError) {
               // Getting User Class data failed...
               Log.w(TAG, "loadUserData:onCancelled", databaseError.toException());
               // ...

        }
    });

我的LoadUserData:

    public void loadUserClass() {


    editTextName.setText(MainActivity.currUser.getName());
    editTextAddress.setText(MainActivity.currUser.getAddress());

}

第一次运行时,所有好的,所有数据都成功加载到我的EditTextViews

当我想编辑执行onFocusChange的editTextViews时,总是会出现错误,而在等检查方法中。

if (!editTextAddress.getText().equals(MainActivity.currUser.getAddress()))

因为MainActivity.currUser.getAddress()突然返回NULL。 这发生在getName。我不知道为什么MainActivity.currUser失去了它的价值。

0 个答案:

没有答案