Firestore操作(add(),set())不起作用

时间:2017-11-12 13:23:16

标签: android google-cloud-firestore

我正在尝试将用户详细信息添加到 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()也无效。

我搜索了所有可能的东西,但没有任何效果。

5 个答案:

答案 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中的“规则”标签下更改了权限。 并为我解决了这个问题:)

我猜这是一开始的权限问题,但现在不能确定。