繁体   English   中英

在查询Firebase数据库数据快照时检索旧值

[英]On Querying to firebase database datasnapshot retrives old value

新值设置为firebase数据库(在firebase控制台上检查),但在查询datasnapshot上检索旧值。

final Query query = FirebaseDatabase.getInstance().getReference(DEVICES_TABLE).orderByChild("deviceUniqueId").equalTo(deviceUniqueId);
query.addValueEventListener(new ValueEventListener() {
    @Override
    public void onDataChange(DataSnapshot dataSnapshot) {
        Device device;
        if (dataSnapshot.getChildren().iterator().hasNext()) {
            device = dataSnapshot.getChildren().iterator().next().getValue(Device.class);
            if (device.getIsEnable() == 1) {
                loginView.onError(loginView.getContext().getString(R.string.error_device_disable));
                doCyberoamLogout(mUserName, location);
            } else {
                switch (mMessage) {
                    case CYBEROAM_LOGIN_SUCCESS_MESSAGE:
                        //login successful
                        Toast.makeText(activity, "Cyberoam login success.", Toast.LENGTH_SHORT).show();
                        new Handler().postDelayed(new Runnable() {
                            @Override
                            public void run() {
                                getEmailUsingCyberoamId(mUserName, mPasswod);
                            }
                        }, 5000);
                        break;
                    case CYBEROAM_WRONG_PASSWORD:
                        signOutFromFirebase();
                        loginView.onError(CYBEROAM_WRONG_PASSWORD);
                        break;
                    case CYBEROAM_MAX_LOGIN_LIMIT:
                        signOutFromFirebase();
                        loginView.onError(loginView.getContext().getResources().getString(R.string.prompt_max_login_limit));
                        break;
                    default:
                        signOutFromFirebase();
                        loginView.onError(loginView.getContext().getResources().getString(R.string.action_cyberoam_login_failed));
                        break;
                }
            }
            query.removeEventListener(this);
        }
    }

    @Override
    public void onCancelled(DatabaseError databaseError) {

    }

});

您需要删除此行:

query.removeEventListener(this);

启用持久性后, addValueEventListener会先返回缓存的数据,然后在下一次返回新数据。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM