Android Firebase 字典键更改大小写

Posted

技术标签:

【中文标题】Android Firebase 字典键更改大小写【英文标题】:Android Firebase dictionary keys changing case 【发布时间】:2019-02-24 14:39:18 【问题描述】:

我正在使用 Firebase 数据库,下面指定的是我的 java 类结构。在 Firebase 数据库中保存我的第一个对象后,我意识到这些键会自动转换为 Firebase 数据库中的小写键。有什么解决方案可以在保存我的对象的同时保留案例。

public class Student 

String NAME;

String ROLL_NUMBER;

String USER_NAME;

String MAIL_ID;

String PASSWORD;


public Student() 


public Student(String NAME, String ROLL_NUMBER, String PASSWORD, String MAIL_ID, String USER_NAME) 
    this.NAME = NAME;
    this.ROLL_NUMBER = ROLL_NUMBER;
    this.PASSWORD = PASSWORD;
    this.MAIL_ID = MAIL_ID;
    this.USER_NAME = USER_NAME;


public String getNAME() 
    return NAME;


public String getROLL_NUMBER() 
    return ROLL_NUMBER;


public String getPASSWORD() 
    return PASSWORD;


public String getMAIL_ID() 
    return MAIL_ID;


public String getUSER_NAME() 
    return USER_NAME;

我也试过@SerializedName 也没有任何区别。 这是 Firebase 数据库中的键值对

"-LMqLmS09gGKjR-s9CML" : 
  "mail_ID" : "gyana@gmail.com",
  "name" : "Gyanaranjan",
  "password" : "123456",
  "roll_NUMBER" : "1001028",
  "user_NAME" : "gyan1028"
, 
 "-LMqMPegnxHp8l4efj_J" : 
  "mail_ID" : "shyamu@gmail.com",
  "name" : "Shyama G",
  "password" : "113456",
  "roll_NUMBER" : "1001056",
  "user_NAME" : "shyamla1056"
 

here is the screenshot of firebase database

【问题讨论】:

请向我们展示您用于将数据添加到数据库的代码。 FirebaseDatabase 数据库 = FirebaseDatabase.getInstance(); DatabaseReference myRef = database.getReference("users");字符串键 = myRef.push().getKey();学生 student = new Student(name, rollNumber, password, mail,userName); myRef.child(key).setValue(student); 您是否尝试过删除旧数据并添加新数据,看看您是否有相同的行为? 以下链接***.com/questions/26292731/… 提供了为什么会发生这种情况的答案/解释,但无法将大写密钥插入 Firebase 数据库系统。在 ios 中,他们可以轻松实现。 你说的是哪个链接? 【参考方案1】:

根据您的 cmets,您需要知道 Firebase 实时数据库遵循 Java Bean 属性命名约定来映射 Java 对象和节点中的字段。

以下是特定方法名称如何映射到属性名称(以及此字段名称)的一些示例:

public String getName(); // getter for property "name"
public void setName(String name); // setter for property "name"

public String getRollNumber(); // getter for property "rollNumber"
public void setRollNumber(String rollNumber); // setter for property "rollNumber"

不强制使用getterssetters。在所有这些情况下,您也可以不使用 getter/setter 并使用 only public 字段:

public String name;
public String rollNumber;

这是绝对安全的。因此不需要同时拥有 getter 和 setter。如果您只有一个 getter,Firebase 将直接设置相应的字段。但是,这确实要求您的字段名称遵循命名约定,以便 Firebase 可以找到要设置的正确字段。

有关其他信息,您还可以查看我在此post 中的回答。

【讨论】:

如果您认为我的回答对您有所帮助,请考虑通过单击左侧投票箭头下方的复选标记来接受它。应将颜色更改为绿色。我会很感激的。谢谢!【参考方案2】:
if you removed the public getters and make the properties as public you will be able to save any Desired case keys.

public class Student 

public String NAME;

public String ROLL_NUMBER;

public String USER_NAME;

public String MAIL_ID;

public String PASSWORD;


public Student() 


public Student(String NAME, String ROLL_NUMBER, String PASSWORD, String MAIL_ID, `enter code here`String USER_NAME) 
    this.NAME = NAME;
    this.ROLL_NUMBER = ROLL_NUMBER;
    this.PASSWORD = PASSWORD;
    this.MAIL_ID = MAIL_ID;
    this.USER_NAME = USER_NAME;

and now you will see the Database with Desired case Key

"-LMqfKkyWC189gaiR1jJ" : 
      "MAIL_ID" : "shreya@gmail.com",
      "NAME" : "Shreya",
      "PASSWORD" : "123456",
      "ROLL_NUMBER" : "1001027",
      "USER_NAME" : "shreya1027"
    

Here is the Firebase database Screenshot

【讨论】:

以上是关于Android Firebase 字典键更改大小写的主要内容,如果未能解决你的问题,请参考以下文章

查询未知父firebase的子快照

如何更改字典列表字典键? [重复]

android - 将数据保存到firebase是用字母键保存的

根据首选顺序更改字典键的顺序

关闭 Firebase 上的实时更改 (Android)

更改字典键时出错