android - 在实时数据库 Android Studio Java 中更改值
问题描述
所以基本上我的问题有点奇怪。但是它会更新值,我需要再次关闭应用程序才能再次更新字段。这是我的更新代码。
saveEditProfile_studentbtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
FirebaseAuth firebaseAuth = FirebaseAuth.getInstance();
String studentUser = firebaseAuth.getCurrentUser().getUid();
final DatabaseReference databaseReference = FirebaseDatabase.getInstance().getReference("Users").child(studentUser);
Toast.makeText(StudentProfileEditAct.this, studentUser, Toast.LENGTH_SHORT).show();
databaseReference.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot snapshot) {
String replaceName = studentChangeFullName.getText().toString().trim();
String replacePhoneNumber = studentChangePhoneNum.getText().toString().trim();
Map<String, Object> updates = new HashMap<>();
updates.put("fullName", replaceName);
updates.put("phoneNumber", replacePhoneNumber);
databaseReference.updateChildren(updates);
Toast.makeText(StudentProfileEditAct.this, "Changes has been made", Toast.LENGTH_SHORT).show();
}
@Override
public void onCancelled(@NonNull DatabaseError error) {
}
});
}
});
这是我的实时数据库。我只是想更改姓名和电话号码。但是出于某种奇怪的原因,它会注销当前用户并重新登录,当我尝试更新值时,实时值(全名,电话号码)数据会从旧值和新值返回并突出显示作为黄色。
当我在没有先关闭应用程序的情况下第二次尝试更新时,下面的图像。
解决方案
如果要根据当前值更新数据库中的值,则应使用事务来防止写入冲突。
但是在您的代码中,我认为没有理由在更新之前先读取用户节点。您可以使用这个更简单的代码,它可以解决您的问题:
public void onClick(View v) {
FirebaseAuth firebaseAuth = FirebaseAuth.getInstance();
String studentUser = firebaseAuth.getCurrentUser().getUid();
final DatabaseReference databaseReference = FirebaseDatabase.getInstance().getReference("Users").child(studentUser);
String replaceName = studentChangeFullName.getText().toString().trim();
String replacePhoneNumber = studentChangePhoneNum.getText().toString().trim();
Map<String, Object> updates = new HashMap<>();
updates.put("fullName", replaceName);
updates.put("phoneNumber", replacePhoneNumber);
databaseReference.updateChildren(updates);
Toast.makeText(StudentProfileEditAct.this, "Changes has been made", Toast.LENGTH_SHORT).show();
}
推荐阅读
- html - 实现返回顶部按钮时页脚消失
- javascript - 如何修复浏览器端的 AJAX 请求无法将数据发送到本地服务器?
- types - `reinterpret` 不适用于 Julia 中的自定义原始类型
- postgresql - vertx 3.7.1 -> 3.8.1 在 vertx-pg-client 中没有 addJson 函数
- hyperledger - Hyperledger Indy 基本概念
- datetime - 为什么在使用请求时解析我的日期成功,但在使用 reqwests 时失败?
- kotlin - 协程执行时间与回调执行时间
- python - 比较数据框字典中的列
- python - 字典中存在的键的 KeyError
- python - 如何测量在循环中创建的多线程所花费的时间?