我正在尝试将用户详细信息添加到 Firestore db ,但无法在其中写入数据。
实际上,没有一个听众既不会被onSuccess()
也不会被onFailure()
触发。
这是我的代码。
Map<String,Object> userlol = new HashMap<>();
userlol.put("name",name);
userlol.put("email",email);
userlol.put("uid",currentUser.getUid());
Log.d(TAG, "we are here");
CollectionReference dc = db.collection("users");
DocumentReference dd = dc.document(currentUser.getUid());
dd.set(userlol)
.addOnSuccessListener(new OnSuccessListener<Void>() {
@Override
public void onSuccess(Void aVoid) {
Toast.makeText(SignupActivity.this, "User Added" ,
Toast.LENGTH_SHORT).show();
Log.d(TAG,"User added to database");
}
})
.addOnFailureListener(new OnFailureListener() {
@Override
public void onFailure(@NonNull Exception e) {
Toast.makeText(SignupActivity.this, "ERROR" +e.toString(),
Toast.LENGTH_SHORT).show();
Log.d(TAG, e.toString());
}
});
我的logcat中没有toast也没有Log。我可以看到
D / logging:我们在这里
此日志并记录此方法后。
规则没有问题,因为onFailure()也无效。
我搜索了所有可能的东西,但没有任何效果。
答案 0 :(得分:1)
我的设备上没有网络连接的唯一方法是我不能同时触发任何回调。在这种情况下,行为是有意义的,因为只有在服务器上提交(或拒绝)数据时才认为任务已完成。
要轻松查看Firestore客户端是否确实无法连接到服务器,请启用调试日志记录:
FirebaseFirestore.setLoggingEnabled(true);
执行此操作后,我会看到这样的日志条目:
11-12 07:56:21.366 10034-10066 / com.firebase.firestorestackoverflow I / Firestore:(0.6.6-dev)[zzetk] :( b6322ac)流已关闭状态:zzcd {code = UNAVAILABLE,description = null,cause = java.net.UnknownHostException:无法解析主机“firestore.googleapis.com”:没有与主机名关联的地址 at java.net.InetAddress.lookupHostByName(InetAddress.java:470) at java.net.InetAddress.getAllByNameImpl(InetAddress.java:252) 在java.net.InetAddress.getAllByName(InetAddress.java:215) 在io.grpc.internal.zzbj $ zzb.zztu(未知来源) 在io.grpc.internal.zzbk.run(未知来源) 在java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1113) at java.util.concurrent.ThreadPoolExecutor $ Worker.run(ThreadPoolExecutor.java:588) 在java.lang.Thread.run(Thread.java:818) 引起:android.system.GaiException:android_getaddrinfo失败:EAI_NODATA(没有与主机名关联的地址) at libcore.io.Posix.android_getaddrinfo(Native Method) 在libcore.io.ForwardingOs.android_getaddrinfo(ForwardingOs.java:55) at java.net.InetAddress.lookupHostByName(InetAddress.java:451) at java.net.InetAddress.getAllByNameImpl(InetAddress.java:252) 在java.net.InetAddress.getAllByName(InetAddress.java:215) 在io.grpc.internal.zzbj $ zzb.zztu(未知来源) 在io.grpc.internal.zzbk.run(未知来源) 在java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1113) at java.util.concurrent.ThreadPoolExecutor $ Worker.run(ThreadPoolExecutor.java:588) 在java.lang.Thread.run(Thread.java:818) }。
答案 1 :(得分:0)
对于将来遇到此问题的任何人来说,只需卸载您的应用程序并重新安装它,就像它的接缝一样野蛮(y)
答案 2 :(得分:0)
我有同样的错误。就我而言,我正在创建一个用户并自动将其注销,以便他们手动登录。 我删除了退出操作,因为如果没有用户登录,数据似乎不会被写入。 写入数据时是否有用户登录?创建用户后,他/她会自动登录。 希望对您有帮助!
答案 3 :(得分:0)
看来,就像在清单文件中添加新权限一样,必须重新安装该应用程序才能注册更改。添加Firestore连接后,我尝试重新安装该应用程序,并且一切正常。瞧!
答案 4 :(得分:0)
我有同样的问题。 首先,@ Frank van Puffelen建议打开日志。 就我而言,我得到了“ Cloud Firestore API不适用于数据存储模式项目”。 因此,我进入了GCP,并通过将数据库更改为本地数据库来手动创建了一个集合。然后我在gui上有一个选项。 现在,错误已更改为“ FirebaseFirestoreException:permission_denied:缺少权限或权限不足” 因此,我在firestore中的“规则”标签下更改了权限。 并为我解决了这个问题:)
我猜这是一开始的权限问题,但现在不能确定。