Firestore报错:Builder中无法解析setTimestampsInSnapshotsEnabled方法
解决Firestore的
setTimestampsInSnapshotsEnabled方法找不到问题 问题原因
setTimestampsInSnapshotsEnabled这个方法在Firebase Firestore 17.0.0及以上版本已经被移除——该时间戳快照功能现在是默认启用的,无需手动配置,所以调用这个方法会报“找不到方法”的错误。
另外你的代码里还有个类型错误:把collection().document()返回的DocumentReference对象,错误声明成了FirebaseFirestoreSettings类型,这会导致后续调用set(user)时也出现异常。
修复步骤
- 移除过时配置代码:直接删掉以下这段无用的配置代码:
FirebaseFirestoreSettings settings = new FirebaseFirestoreSettings.Builder() .setTimestampsInSnapshotsEnabled(true) .build(); mDb.setFirestoreSettings(settings);
- 修正变量类型:把错误的变量声明改成正确的
DocumentReference类型:
// 错误写法 FirebaseFirestoreSettings newUserRef = mDb .collection(getString(R.string.collection_users)) .document(FirebaseAuth.getInstance().getUid()); // 正确写法 DocumentReference newUserRef = mDb .collection(getString(R.string.collection_users)) .document(FirebaseAuth.getInstance().getUid());
修正后的完整registerNewEmail方法
public void registerNewEmail(final String email, String password){ showDialog(); FirebaseAuth.getInstance().createUserWithEmailAndPassword(email, password) .addOnCompleteListener(new OnCompleteListener<AuthResult>() { @Override public void onComplete(@NonNull Task<AuthResult> task) { Log.d(TAG, "createUserWithEmail:onComplete:" + task.isSuccessful()); if (task.isSuccessful()){ Log.d(TAG, "onComplete: AuthState: " + FirebaseAuth.getInstance().getCurrentUser().getUid()); //insert some default data User user = new User(); user.setEmail(email); user.setUsername(email.substring(0, email.indexOf("@"))); user.setUser_id(FirebaseAuth.getInstance().getUid()); // 修正后的文档引用声明 DocumentReference newUserRef = mDb .collection(getString(R.string.collection_users)) .document(FirebaseAuth.getInstance().getUid()); newUserRef.set(user).addOnCompleteListener(new OnCompleteListener<Void>() { @Override public void onComplete(@NonNull Task<Void> task) { hideDialog(); if(task.isSuccessful()){ redirectLoginScreen(); }else{ View parentLayout = findViewById(android.R.id.content); Snackbar.make(parentLayout, "Something went wrong.", Snackbar.LENGTH_SHORT).show(); } } }); } else { View parentLayout = findViewById(android.R.id.content); Snackbar.make(parentLayout, "Something went wrong.", Snackbar.LENGTH_SHORT).show(); hideDialog(); } // ... } }); }
内容的提问来源于stack exchange,提问作者Donny
相关产品推荐
相关产品推荐

