android - 将实时数据库 DatabaseReference.addListenerForSingleValueEvent 转换为云 Firestore
问题描述
我想将以下实时数据库代码转换为使用 Firebase:
private void setupFirebaseAuth(){
Log.d(TAG, "setupFirebaseAuth: setting up firebase auth.");
mAuth = FirebaseAuth.getInstance();
mFirebaseDatabase = FirebaseDatabase.getInstance();
myRef = mFirebaseDatabase.getReference();
mAuthListener = new FirebaseAuth.AuthStateListener() {
@Override
public void onAuthStateChanged(@NonNull FirebaseAuth firebaseAuth) {
FirebaseUser user = firebaseAuth.getCurrentUser();
if (user != null) {
// User is signed in
Log.d(TAG, "onAuthStateChanged:signed_in:" + user.getUid());
myRef.addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
//1st check: Make sure the username is not already in use
if(firebaseMethods.checkIfUsernameExists(username, dataSnapshot)){
append = myRef.push().getKey().substring(3,10);
Log.d(TAG, "onDataChange: username already exists. Appending random string to name: " + append);
}
username = username = append;
//add new user to the database
//add new user_account_settings to the database
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
} else {
// User is signed out
Log.d(TAG, "onAuthStateChanged:signed_out");
}
// ...
}
};
}
其中变量定义如下:
//firebase
private FirebaseAuth mAuth;
private FirebaseAuth.AuthStateListener mAuthListener;
private FirebaseMethods firebaseMethods;
private FirebaseDatabase mFirebaseDatabase;
private DatabaseReference myRef;
我可以重用其中的大部分内容,除非数据库的定义如下:
private FirebaseDatabase mFirebaseDatabase;
private DatabaseReference myRef;
这将是:
private FirebaseFirestore db;
什么对应于 Firestore 的 DatabaseReference,因为稍后,我不知道如何将 myRef.addListenerForSingleValueEvent 调整到 Cloud Firestore
解决方案
addListenerForSingleValueEvent
Cloud Firestore 中最接近的等价物是get()
.
关于获取数据的Firestore 文档包含这个更完整的示例:
DocumentReference docRef = db.collection("cities").document("SF"); docRef.get().addOnCompleteListener(new OnCompleteListener<DocumentSnapshot>() { @Override public void onComplete(@NonNull Task<DocumentSnapshot> task) { if (task.isSuccessful()) { DocumentSnapshot document = task.getResult(); if (document.exists()) { Log.d(TAG, "DocumentSnapshot data: " + document.getData()); } else { Log.d(TAG, "No such document"); } } else { Log.d(TAG, "get failed with ", task.getException()); } } });
我建议查看文档并尝试一下。如果您在转换的特定步骤中遇到困难,请展示您尝试过的内容。
推荐阅读
- android - 如何在 Sketchware webview 应用程序上修复 net::ERR_UNKNOWN_URL_SCHEME?
- c# - 无法弄清楚如何根据两个数字返回三个值之一
- html - Bootstrap 4中心图像但文本左对齐
- kubernetes - Pods readiness check 运行后失败,为什么新的 Pod 没有启动?
- c# - 如何从 JArray 中选择元素的值
- python - Python web scrape:处理用户登录弹出窗口
- npm - 在 Mac 上安装 npm expo cli 时出现错误?
- git - Github - 在日志文件中看不到合并
- java - 如何解决:上下文初始化期间遇到异常 - 取消刷新尝试?
- javascript - 在视口之外创建 div 时,溢出滚动将不起作用