在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
失去了它的价值。