我想更新Firebase数据库上的特定节点值。假设我要在Firebase中设置的新longitude
值为72.7665443
,而不是经度25
。
为此,我需要一个KZaouoZ8jRsZIYL_9Xg
的密钥。如何获取特定节点的密钥?是否有更新节点的官方方法?
答案 0 :(得分:1)
通常在no-sql数据库中你会得到Key-Value对的概念,在这种情况下它是simiar,它是一个带有值的节点。
请提供有关此问题的更多详情...... 您需要密钥才能访问该值,在这种情况下,UsersDatabase似乎是用户数据的容器,可能链接到FirebaseAuth帐户,如果是这种情况,那么您的用户的UUID应该与数据库上的密钥匹配,这是如何得到它:
FirebaseAuth firebaseAuth;
FirebaseUser user;
firebaseAuth = FirebaseAuth.getInstance();
user = firebaseAuth.getCurrentUser();
String userUid = user.getUid();
这种情况非常简单,您可以在UsersDatabase节点上获取数据库引用,然后访问它的子对象:
DatabaseReference databaseReference;
databaseReference = FirebaseDatabase.getInstance().getReference("UsersDatabase");
databaseReference.child(user.getUid()).setValue(/*YOUR OBJECT CLASS GOES HERE*/);
如果没有,那么您可以使用ad-hoc查询来通过另一个字段获取特定节点,例如:
DatabaseReference databaseReference;
databaseReference = FirebaseDatabase.getInstance().getReference("UsersDatabase");
Query filteredData = databaseReference
.orderByChild("name")
.startAt("Gulfad")
.endAt("Gulfad");
注意:您应该有办法访问这些项目的键。查询那些对数据库性能难以使用的项目。
答案 1 :(得分:0)
您正在使用以下方法创建UsersDatabase的子节点,并且您应用的方法使用firebase自动生成的唯一键,在用户' Gulfad'是KZaouoZ8jRsZIYL_9Xg
String key=firebaseDatabase.push().getKey();
firebaseDatabase.child(key).setValue(date,lat,long,name,phone,time);
KZaouoZ8jRsZIYL_9Xg对于任何人来说都是很长的记忆,所以不应该为用户创建子节点而不应该使用push.getKey()方法,而应该使用用户输入的电话号码作为他的密钥然后你可以以后只需使用他的电话号码就可以轻松访问他的节点。
首先,我们将创建一个单独的Java类来存储用户的数据,然后将其作为对象传递给fireaseDatabase。
public class users
{
String date,lat,long,phone,name,time;
public users()
{
}
public users( String date, String, lat, String long,String name, String phone,String time) {
this.date=date;
this.lat=lat;
this.long=long;
this.name = name;
this.phone = phone;
this.time=time;
}
以下代码行为User' Gulfad'创建子节点。通过使用他的电话号码作为他的标识符而不是firebase生成的密钥。
DatabaseReference firebaseDatabase=FirebaseDatabase.getInstance().getReference("UsersDatabase");
users myuser=new users(date,lat,long,name,phone,time);//myuser is our new object
firebaseDatabase.child(phone).setValue(myuser);//myuser contains all the values so it will be passed to the firebaseDatabase
稍后,我们可以使用新的“经度”值创建更新用户对象的经度值,并使用用户的电话号码更新他的&#39 ;经度'节点值
myuser.long=newlongitude; //newlongitude contains the new value for longitude
DatabaseReference firebaseDatabase=FirebaseDatabase.getInstance().getReference("UsersDatabase");
firebaseDatabase.child(phone).setValue(myuser);//myuser contains all the values(including the new longitude) so it will be passed to the firebaseDatabase
答案 2 :(得分:0)
当您创建 UsersDatabase 时,您必须在sharedpreference
课程中保存该唯一键。
DatabaseReference databaseReference;
databaseReference=FirebaseDatabase.getInstance().getReference("UsersDatabase");
String uniqueKey=sharedprefrence.getUniqueKey();
Map<String, Object> taskMap = new HashMap<String, Object>();
taskMap.put("longitude", longitudeValue);
databaseReference.getReference("UsersDatabase").getChild(uniqueKey).updateChildren(taskMap);
答案 3 :(得分:0)
试试这段代码..
DatabaseReference mFirebaseDatabase = mFirebaseInstance.getReference("usersDb/UserTable");
private void updateUser(String name, String email, String pwd) {
if (TextUtils.isEmpty(userId)) {
userId = mFirebaseDatabase.push().getKey();
}
User user = new User(name, email, pwd);
mFirebaseDatabase.child("User").setValue(user);
}
为更新数据制作pojo类,它易于更新和删除。并使mFirebaseDatabase对象全局化,然后任何访问类的位置。