注册时尝试向 Firebase 用户添加新的数据字段,但 FirebaseUser.class 文件中没有更新 X 方法
Posted
技术标签:
【中文标题】注册时尝试向 Firebase 用户添加新的数据字段,但 FirebaseUser.class 文件中没有更新 X 方法【英文标题】:Tried to add a new field of data to Firebase user when registering, but no update X method in FirebaseUser.class file 【发布时间】:2021-11-08 16:40:03 【问题描述】:我使用的是实时数据库,所以用户存储在数据库中。我正在尝试为 FirebaseUser 对象实现一个“currentLocation”字段,以便最终可以为附近用户的每个用户创建一个列表。我已经在使用 HashMap 来输入数据,所以我只添加了 hashmap.put('currentLocation', '');创建一个空的当前位置字段,以后可以更新。
不幸的是,由于 FirebaseUser.class 中没有 updateCurrentLocation() 方法,我找不到设置/更新 currentLocation 字段的方法。如何将此方法添加到此只读文件?这甚至是最好的方法吗?
代码:
//Dashboard.java
usedLocationClient.getLastLocation()
.addOnSuccessListener(this, new OnSuccessListener<Location>()
@Override
public void onSuccess(Location location)
// Got last known location. In some rare situations this can be null.
if (location != null)
// Logic to handle location object
//get current user
final FirebaseUser fUser = FirebaseAuth.getInstance().getCurrentUser();
//Updates the firebase db user with their current location.
fUser.updateCurrentLocation(location);
//This method is not in the firebaseuser.class file but needs to be!
//fUser.updateCurrentLocation(location);
);
//RegisterActivity.java
mAuth.createUserWithEmailAndPassword(email, password)
.addOnCompleteListener(this, new OnCompleteListener<AuthResult>()
@Override
public void onComplete(@NonNull Task<AuthResult> task)
if (task.isSuccessful())
// Sign in success, dismiss dialog and start register activity
progressDialog.dismiss();
FirebaseUser user = mAuth.getCurrentUser();
//Get user email and uid from auth
String email = user.getEmail();
String uid = user.getUid();
//When user is registered store user info in firebase realtime database too
//using HashMap
HashMap<Object, String> hashMap = new HashMap<>();
//put info in hasmap
hashMap.put("email", email);
hashMap.put("uid", uid);
hashMap.put("name", ""); //will add later (e.g. edit profile)
hashMap.put("currentLocation", "");
hashMap.put("onlineStatus", "online"); //will add later (e.g. edit profile)
hashMap.put("typingTo", "noOne"); //will add later (e.g. edit profile)
hashMap.put("phone", ""); //will add later (e.g. edit profile)
hashMap.put("image", ""); //will add later (e.g. edit profile)
hashMap.put("cover", ""); //will add later (e.g. edit profile)
//firebase database instance
FirebaseDatabase database = FirebaseDatabase.getInstance();
//path to store user data named "Users"
DatabaseReference reference = database.getReference("Users");
//put data within hashmap in database
reference.child(uid).setValue(hashMap);
Toast.makeText(RegisterActivity.this, "Registered...\n"+user.getEmail(), Toast.LENGTH_SHORT).show();
startActivity(new Intent(RegisterActivity.this, DashboardActivity.class));
finish();
//FirebaseUser.class Bytecode
@NonNull
public Task<Void> updateEmail(@NonNull String email)
Preconditions.checkNotEmpty(email);
return FirebaseAuth.getInstance(this.zza()).zzn(this, email);
@NonNull
public Task<Void> updatePassword(@NonNull String password)
Preconditions.checkNotEmpty(password);
return FirebaseAuth.getInstance(this.zza()).zzo(this, password);
@NonNull
public Task<Void> updatePhoneNumber(@NonNull PhoneAuthCredential credential)
return FirebaseAuth.getInstance(this.zza()).zzp(this, credential);
@NonNull
public Task<Void> updateProfile(@NonNull UserProfileChangeRequest request)
Preconditions.checkNotNull(request);
return FirebaseAuth.getInstance(this.zza()).zzq(this, request);
【问题讨论】:
【参考方案1】:FirebaseUser 类,只有几个与身份验证相关的字段。如果您需要有关用户的更多详细信息,您应该创建一个 POJO 类来存储其他数据。
这些数据可以存储在Cloud Firestore 或Realtime Database 中,以便以后使用。
另请注意,实时数据库不存储空值。 Firestore 可以。
【讨论】:
感谢您的回复,但我已经在测试时将这种方法用于不同的值并且它有效。所以我添加了另一个字段并将其设置为空,它以空值出现在实时数据库中。然后我添加了一个表单来更新值,它工作正常。尽管它仍然没有 FirebaseUser.update() 方法。那么我需要查找什么才能使用 POJO 执行此操作?谢谢。 我认为repo 可以帮助您了解这个想法。如果您需要更新 FirebaseUser 对象,请检查此answer。【参考方案2】:要更新当前用户的位置,你可以这样做:
FirebaseDatabase database = FirebaseDatabase.getInstance();
DatabaseReference reference = database.getReference("Users");
reference.child(uid).child("currentLocation").setValue("the location");
既然你提到想找到附近的用户,我建议你去看看:Query for nearby locations 和https://github.com/firebase/geofire-android/
【讨论】:
以上是关于注册时尝试向 Firebase 用户添加新的数据字段,但 FirebaseUser.class 文件中没有更新 X 方法的主要内容,如果未能解决你的问题,请参考以下文章
将 Firebase FCM 添加到 reactjs 应用程序