无法在Firestore(Android)中向文档添加数据

时间:2020-03-04 14:37:21

标签: android firebase google-cloud-firestore

我正在尝试将数据添加到Firebase Firestore的文档中。我已经添加了一个名为users的集合。同时,读/写权限目前处于打开状态。我正在关注this doc。而且我无法向文档中添加数据。

这就是我想要做的:

private void getNewUserSnapShot() {
    FirebaseFirestore db = FirebaseFirestore.getInstance();
    FirebaseUser user = firebaseAuth.getCurrentUser();
    Log.d(TAG, "getNewUserSnapShot: user_uid: " + user.getUid());
    DocumentReference user_doc_ref = db.collection("users").document();

    Log.d(TAG, "getNewUserSnapShot: document ref: " + user_doc_ref.getId());

    Map<String, Object> user_data = new HashMap<>();
    user_data.put("name", user.getDisplayName());
    user_data.put("email", user.getEmail());
    user_data.put("profile_url", user.getPhotoUrl());

    Log.d(TAG, "getNewUserSnapShot: user_data: " + user_data.toString());

    user_doc_ref
            .set(user_data)
            .addOnCompleteListener(new OnCompleteListener<Void>() {
                @Override
                public void onComplete(@NonNull Task<Void> task) {
                    Toast.makeText(LoginActivity.this, task.toString(), Toast.LENGTH_LONG).show();
                    if (task.isSuccessful()) {
                        Log.d(TAG, "getNewUserSnapShot: success");
                    } else {
                        Log.d(TAG, "getNewUserSnapShot: failed");
                    }
                }
            });
}

在日志中,我仅看到以下内容(无论是失败还是成功的日志):

2020-03-04 19:48:47.489 30744-30744/com.example.expenditure D/LoginActivity: getNewUserSnapShot: user_uid: iXOzfju6kORnhuUND8zFCPTzxY93
2020-03-04 19:48:47.499 30744-30744/com.example.expenditure D/LoginActivity: getNewUserSnapShot: document ref: 7AluPzcYMLzDKLh8YtBt
2020-03-04 19:48:47.499 30744-30744/com.example.expenditure D/LoginActivity: getNewUserSnapShot: user_data: {profile_url=https://someurl/security/reasons, name=Nikhil Wagh, email=null}

当我看到Firebase控制台时,根据应已创建的日志,找不到ID为7AluPzcYMLzDKLh8YtBt的文档。

有一个类似的问题:Unable to add information to Cloud Firestore但没有正确的答案。

有人可以帮忙吗?我在做什么错了?

1 个答案:

答案 0 :(得分:0)

问题是user.getPhotoUrl()返回了url,但是Firestore不支持url。需要将该URL强制转换为字符串,然后它才能工作。

在将数据添加到Firestore之前将URL转换为字符串。