【问题标题】:How to add child to existing data in Firebase如何将子级添加到 Firebase 中的现有数据
【发布时间】:2021-07-17 19:11:48
【问题描述】:

如何通过 Android 应用程序将子项添加到 Firebase 数据库中的现有数据?这是我的 Firebase 数据库的样子:

我希望能够将数据作为子项保存到图像中的父值,以便我可以拥有值列表。问题是我不知道如何从我的应用程序中使用自动生成的 id 来获取这些现有值,我希望能够将一个值作为子项保存到微调器中当前选择的值中。

以下是将“列表”推送到数据库的代码:

private void onAddListClick()
{
    String text = listEditText.getText().toString();
    String refPath = "CategoryList";

    if (text.trim().length() > 0)
    {
        FirebaseDatabase database = FirebaseDatabase.getInstance();
        DatabaseReference myRef = database.getReference(refPath);

        myRef.push().setValue(text);

        listEditText.getText().clear();

        finish();
    } else
        {
            //...
        }
}

这是应该根据微调器选择将值/任务保存在正确列表中的代码:

private void onAddTaskClick()
{
    FirebaseDatabase database = FirebaseDatabase.getInstance();
    DatabaseReference myRef = database.getReference("CategoryList");

    String text = taskEditText.getText().toString();
    String spinnerValue = spinner.getSelectedItem().toString();

    if (text.trim().length() > 0)
    {
        list.add(new Task(text));
        recyclerViewAdapter.notifyDataSetChanged();

        taskEditText.getText().clear();

        //Change me!!
        //myRef.push().setValue(text);

    } else
        {
            //...
        }
}

编辑: 我的问题的一个可能解决方案是获取自动生成的 id,然后将一个子项添加到该现有值。我知道在将值推送到数据库时立即获取 id 的答案还有其他问题,但是当我想稍后将孩子添加到现有值时,我希望能够获取 id。

【问题讨论】:

  • 我不确定我是否理解问题所在。当您运行共享的代码时,它会做什么?你希望它做什么?
  • 这段代码中到底有什么不符合您的预期?告诉我们共享代码有什么问题。你有什么错误吗?请回复@。
  • @FrankvanPuffelen 当onAddTaskClick() 运行时,我希望它将文本作为子项保存到微调器中选择的列表中,例如,我希望将其作为子项保存到“上图中的列表”。现在,当//Change me!! 注释下的代码运行时,它只是将值作为新值推送到 Firebase 数据库中。我希望更改该行,以便将值作为子项保存到列表中。希望这是有道理的。
  • @AlexMamo 代码没有给我任何错误,但它没有给我想要的结果。在上面的示例中,我目前有两个列表,在应用程序中,我在微调器中选择其中一个列表,我希望能够将任务添加到该特定列表,以便添加的任务将作为子任务保存到该列表在 firebase 数据库中,我希望它是列表的子值,而不是仅仅在列表旁边推送一个新值。希望能澄清我的问题和期望的结果。

标签: java android firebase firebase-realtime-database


【解决方案1】:

如果spinnerValue 是他们在微调器中单击的项目的数据库中的键,您可以将子节点添加到该节点:

String spinnerValue = spinner.getSelectedItem().toString();

if (text.trim().length() > 0)
{
    list.add(new Task(text));
    recyclerViewAdapter.notifyDataSetChanged();

    taskEditText.getText().clear();

    myRef.child(spinnerValue).push().setValue(text); // ? change here
} else

【讨论】:

  • 实际上spinnerValue 只是一个带有实际列表名称的字符串,所以上面的代码所做的只是添加一个新值,例如带有一个子元素的“A List” .我想我需要代替spinnerValue 的是自动生成的ID,但我将如何获得它呢?还是有更简单的方法来做我想做的事?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-08-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-03-28
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多