我有一个活动
,它将活动时间数据注册到我的Firebase实时数据库中,这是使用编辑文本
手动输入的,然后将其显示到UI中的文本视图
。这一切都很好,但是,如果我要输入更多数据,它只需替换数据库中的值和TextView
。
我以前在另一个活动中做过类似的事情(将多个Firebase子值相加(合计)以得到总价值?),但是,这个活动有额外的带日期的节点等,所以同样的方法在我当前的活动中不起作用。理想情况下,我将使用dateStrings等组织此节点,但是,出于演示目的,没有必要。因此,我只想获取数据库中已经存在的任何值,并向其添加输入值,然后将其恢复到数据库。
这可能很简单,但是我已经盯着它看了很久,我把自己弄糊涂了。这一点都不正确,但对我接下来的步骤有点困惑...我可能已经看到了一些沿着这些路线如何在Firebase实时Android Studio中求和金钱价值,但想知道这是否是最简单的方法?
注册活动方法:
registerActivity.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
String activityTime = activeMinutes.getText().toString().trim();
databaseReference.child("active time").setValue(activityTime);
addActivity.setVisibility(View.VISIBLE);
registerActivity.setVisibility(View.GONE);
activeTimeTI.setVisibility(View.GONE);
}
});
显示数据的方法(缩短):
databaseReference.addValueEventListener(new ValueEventListener() {
@RequiresApi(api = Build.VERSION_CODES.O)
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
int total = 0;
String activityTime = dataSnapshot.child("active time").getValue(String.class);
if (activityTime == null) {
activeTimeTV.setText("0");
} else {
total += Integer.parseInt(activityTime);
activeTimeTV.setText(String.valueOf(total) + " minutes");
}
}
@Override
public void onCancelled(DatabaseError databaseError) {
Log.w("TAG", "onCancelled", databaseError.toException());
}
});
Firebase层次结构:
根据你最后的评论:
现在的活动时间是500(分钟),如果我再做90分钟的活动,我想在该值上加上90,然后将其更新为590。
要将“活动时间”的值增加90,首先,您需要将字段的类型更改为数字。话虽如此,你的领域应该是这样的:
ndkdn
|
--- active time: 500
看,没有引号。如果您的“ndkdn”节点是Firebase实时数据库根目录的直接子节点,要将该值增加90,只需使用以下代码行:
DatabaseReference rootRef = FirebaseDatabase.getInstance().getReference();
DatabaseReference activeTimeRef = rootRef.child("ndkdn").child("active time");
activeTimeRef.setValue(ServerValue.increment(90));
这种操作是原子的。如果不允许您更改字段的类型以获得一致的数据,则应首先读取值,然后使用事务将其递增:
activeTimeRef.runTransaction(new Transaction.Handler() {
@Override
public Transaction.Result doTransaction(MutableData mutableData) {
Integer activeTime = Integer.parseInt(mutableData.getValue(String.class));
if (score == null) {
return Transaction.success(mutableData);
}
mutableData.setValue((activeTime + 90) + "");
return Transaction.success(mutableData);
}
@Override
public void onComplete(DatabaseError error, boolean b, DataSnapshot snapshot) {
Log.d("TAG", error.getMessage()); //Don't ignore potential errors!
}
});
事件适配器 事件活动 @override public void onBindViewHolder(@nonnull ViewHolder holder,final int position){
我无法在Firebase实时数据库中添加任何数据。数据库连接正常,但我无法添加任何数据。当我单击“到”按钮时,添加到数据库中的数据。 主要活动。java-代码 事件。java-代码
问题内容: 我想向Firebase身份验证添加新数据,其中包含显示名称,电话号码,图像之类的数据。但是我想增加更多这样的性别,生日等等。是否可以添加新的? 问题答案: 无法将任意其他数据添加到Firebase身份验证用户配置文件。如果需要,请考虑使用Firebase Realtime数据库(或CloudFirestore)存储其他信息。 自几周前以来,您可以向Firebase身份验证用户配置文件中
我想添加一个新的数据到firebase认证,它有像displayname,电话号码,图像的数据。但我想增加更多这样的性别,生日和更多。有可能添加新的吗?
我想向数据库中插入值,但它无法工作,尽管我的代码在用作存储过程时运行良好。我需要使用按钮点击来存储值。请告诉我代码有什么问题。它没有显示任何错误或异常,但表中的数据没有更新
我在生产中有一个基于Hibernate的应用程序,有一个大型数据库。我需要在这个应用程序中向两个实体(两个表)添加审计,我决定使用Envers。 对于每次插入、更新或删除,Envers都会向实体的审核表中添加一条新记录。 如果从应用程序一开始就支持Envers,那么审计表将在实体创建(INSERT)时填充。 Envers留档非常薄,没有提到任何关于将Envers添加到现有应用程序的内容。 如果我简