【问题标题】:How can i assign a name to items in an array list in firebase database如何为firebase数据库中数组列表中的项目分配名称
【发布时间】:2021-04-16 02:51:35
【问题描述】:

我希望能够为数组列表中的项目命名,并在我的 firebase 实时数据库中使用这些名称。目前,我有一个设置,如果用户处于与以前不同的一周,我将创建一个“ProgressWeek”对象。对于这个对象,我是这样构造它的:

myRef.child(week_year).setValue(new ProgressWeek(weekName, days));

'weekName' 是一个包含星期名称的字符串变量,即'16 April - 23 April'。 'days' 是一个 ArrayList。 ProgressDay 是这样构造的:

days.add(new ProgressDay(name));

'name' 是当天的名称,即'Thu, 22-04'。

我遇到的问题是,将其存储在 Firebase 实时数据库中时,我得到以下信息:

'days' 表示 ArrayList,'weekName' 是构造新 ProgressWeek 对象时给出的 String var。 如您所见,日期是通过索引或它们添加到列表中的顺序排序的。这并不理想,因为如果我想要'Fri, 16-04' 天的数据,我将不得不遍历所有天,并且只获取 dayName.equals("Fri, 16-04") 的数据。这也需要培养不同的听众。

我想要的是能够使用类似下面的东西来获取我想要的数据。

myRef.child("days").child(theDateOfToday).child("theDataThatIWant").addListenerForSingleValueEvent(new ValueEventListener() {
            @Override
            public void onDataChange(@NonNull DataSnapshot snapshot) {
                if(snapshot.getValue() != null)
                {
                    myData = snapshot.getValue(Integer.class);
                }
            }

            @Override
            public void onCancelled(@NonNull DatabaseError error) {

            }
        });

我之所以使用 Objects 来输入数据库,是因为将来我计划使用 RecyclerView 来显示该周的周数和所有天数。

ProjectWeek 类:

import java.util.ArrayList;

public class ProgressWeek {
    private String weekName;
    private ArrayList<ProgressDay> days;

    ProgressWeek()
    {

    }

    ProgressWeek(String weekName, ArrayList<ProgressDay> days)
    {
        setWeekName(weekName);
        setDays(days);
    }

    public String getWeekName() {
        return weekName;
    }

    public void setWeekName(String weekName) {
        this.weekName = weekName;
    }

    public ArrayList<ProgressDay> getDays() {
        return days;
    }

    public void setDays(ArrayList<ProgressDay> days) {
        this.days = days;
    }
}

我想要在我的数据库中作为 JSON 的内容:

{

“用户”:{ “示例用户 ID”:{ “用户数据1”:68, “用户数据2”:49, “用户数据3”:5, “周”:{ “16”:{ “天” : [ { "dayName" : "周六 17-04", “dataAboutDay”:0 }, { "dayName" : "Sun, 18-04", “dataAboutDay”:0 }, { "dayName" : "星期一 19-04", “dataAboutDay”:0 }, { "dayName" : "星期二,20-04", “dataAboutDay”:0 }, { "dayName" : "星期三,21-04", “dataAboutDay”:0 }, { "dayName" : "星期四 22-04", “dataAboutDay”:0 }], "weekName" : "4 月 16 日 - 4 月 23 日" } }, “用户数据4”:60, “用户数据5”:40, “用户名”:“示例用户” } } }

注意:我希望使用他们的 dayName 来标识日期。

【问题讨论】:

  • 我不确定我是否理解当前结构的问题,但这可能无关紧要。您能否编辑您的问题以显示您的 ProgressWeek 课程以及您希望存储在数据库中的 JSON(请以文本形式)?
  • 编辑了问题

标签: android firebase-realtime-database


【解决方案1】:

Firebase 实时数据库通过其索引将数组转换为有序列表,要更改这一点,您必须将数组转换为对象映射,或者至少更改它的生成方式以避免重新映射它。

一种常见的解决方案是哈希图:

// Write a message to the database
Database = FirebaseDatabase.getInstance();
DbRef = Database.getReference("Path/To/Location");

//Writing HashmapMap<String, Object> 
HashMap<String, Object> days = new HashMap<>();
days.put("Name1/SubName1", "Value A");
days.put("Name1/SubName2", "Value B");
DbRef.updateChildren(days);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-03-02
    • 2020-11-01
    • 1970-01-01
    • 2020-07-08
    • 1970-01-01
    相关资源
    最近更新 更多