Android 安卓Firestore重启应用程序

Android 安卓Firestore重启应用程序,android,firebase,google-cloud-firestore,Android,Firebase,Google Cloud Firestore,嗨,我正在使用Firebase Firestore来存储数据,而不使用服务器。但是,我想我在Firestore的快照侦听器上遇到了问题。下面是我使用的代码 出现问题的快照侦听器 register = FireStore.getUserInfo(firestore, uid).addSnapshotListener(new EventListener<DocumentSnapshot>() { @Override public void onEvent(Document

嗨,我正在使用Firebase Firestore来存储数据,而不使用服务器。但是,我想我在Firestore的快照侦听器上遇到了问题。下面是我使用的代码

出现问题的快照侦听器

register = FireStore.getUserInfo(firestore, uid).addSnapshotListener(new EventListener<DocumentSnapshot>() {
    @Override
    public void onEvent(DocumentSnapshot documentSnapshot, FirebaseFirestoreException e) {
        Log.d("Snapshot Listener", "Calling");
        String source = documentSnapshot != null && documentSnapshot.getMetadata().hasPendingWrites() ? "local" : "server";
        if(documentSnapshot != null & documentSnapshot.exists()) {
            Log.d("Snapshot Listener", source + " data :" + documentSnapshot.getData());
        } else {
            Log.d("Snapshot Listener", source + " data : null");
        }
        currentUser = documentSnapshot.toObject(User.class);
        runOnUiThread(new Runnable() {
            @Override
            public void run() {
                Log.d("Snapshot Listener", "Point is updated.");
                tvBoneNum.setText(String.valueOf(currentUser.getPoint()));
            }
        });
    }
});

当用户类的值发生更改,并将这些值更新到firestore中时,快照侦听器应该确认onEvent()方法和onEvent方法代码下面的进程,但它会使我的应用程序重新启动。其他快照侦听器不会使应用程序重新启动。我想不出这个问题的原因。如何解决这个问题?

您需要将从数据库获取数据的逻辑移到if语句中。您的数据可能是
null
。因此,如果为空,则不需要执行这些代码行。这就是你重新启动应用程序的原因

register = FireStore.getUserInfo(firestore, uid).addSnapshotListener(new EventListener<DocumentSnapshot>() {
    @Override
    public void onEvent(DocumentSnapshot documentSnapshot, FirebaseFirestoreException e) {
        Log.d("Snapshot Listener", "Calling");
        String source = documentSnapshot != null && documentSnapshot.getMetadata().hasPendingWrites() ? "local" : "server";
        if(documentSnapshot != null & documentSnapshot.exists()) {
            Log.d("Snapshot Listener", source + " data :" + documentSnapshot.getData());

            currentUser = documentSnapshot.toObject(User.class);
            runOnUiThread(new Runnable() {
                 @Override
                public void run() {
                    Log.d("Snapshot Listener", "Point is updated.");
                    tvBoneNum.setText(String.valueOf(currentUser.getPoint()));
                }
            });
        } else {
            Log.d("Snapshot Listener", source + " data : null");
        }
    }
});
register=FireStore.getUserInfo(FireStore,uid).addSnapshotListener(新的EventListener(){
@凌驾
public void onEvent(DocumentSnapshot DocumentSnapshot,FireBaseFireStoree异常){
Log.d(“快照侦听器”、“调用”);
String source=documentSnapshot!=null&&documentSnapshot.getMetadata().hasPendingWrites()?“local”:“server”;
if(documentSnapshot!=null&documentSnapshot.exists()){
Log.d(“快照侦听器”,源+“数据:”+documentSnapshot.getData());
currentUser=documentSnapshot.toObject(User.class);
runOnUiThread(新的Runnable(){
@凌驾
公开募捐{
Log.d(“快照侦听器”,“点已更新”);
tvboneum.setText(String.valueOf(currentUser.getPoint());
}
});
}否则{
Log.d(“快照侦听器”,源+“数据:null”);
}
}
});
register = FireStore.getUserInfo(firestore, uid).addSnapshotListener(new EventListener<DocumentSnapshot>() {
    @Override
    public void onEvent(DocumentSnapshot documentSnapshot, FirebaseFirestoreException e) {
        Log.d("Snapshot Listener", "Calling");
        String source = documentSnapshot != null && documentSnapshot.getMetadata().hasPendingWrites() ? "local" : "server";
        if(documentSnapshot != null & documentSnapshot.exists()) {
            Log.d("Snapshot Listener", source + " data :" + documentSnapshot.getData());

            currentUser = documentSnapshot.toObject(User.class);
            runOnUiThread(new Runnable() {
                 @Override
                public void run() {
                    Log.d("Snapshot Listener", "Point is updated.");
                    tvBoneNum.setText(String.valueOf(currentUser.getPoint()));
                }
            });
        } else {
            Log.d("Snapshot Listener", source + " data : null");
        }
    }
});