3

我的班级CredicardinfoObject.class保存类火力

public class CreditcardinfoOjbect implements Serializable { 
    private static final long serialVersionUID = 1L; 

    public static String title; 
    public static String startTime; 
    public static String endTime; 
    public static String day; 

} 

这个类只有静态的礼仪。没有实例化需要。

在我的mainActivity.class,我想设置类的值,然后存储这个firebase数据库。这是我的mainActivity.class

CreditcardinfoOjbect.title = "foo"; 
    CreditcardinfoOjbect.startTime = "bar"; 
    CreditcardinfoOjbect.day = "1"; 
    CreditcardinfoOjbect.endTime = "2"; 

    final FirebaseDatabase database = FirebaseDatabase.getInstance(); 
    String uid = ""; 
    FirebaseAuth auth = FirebaseAuth.getInstance(); 
    FirebaseUser user = auth.getCurrentUser(); 
    if (user != null) { 
     uid = user.getUid(); 
    } 
    DatabaseReference ref = database.getReference("users").child(uid).child("account").child("creditcards"); 

    HashMap<String, Class<CreditcardinfoOjbect>> hashMap = new HashMap<>(); 
    hashMap.put("card", CreditcardinfoOjbect.class); 
    ref.setValue("card",hashMap); 

不幸的是,这是行不通的。如何在Firebase中存储类的当前值?

+0

尝试将pojo类数据转换为不同的变量,然后将其添加到firebase中。从Firebase获取数据时再次创建pojo类 –

+0

我猜你需要安装程序和Getter – Elsunhoty

+0

请参阅下面的答案。让我知道如果它不起作用 – UmarZaii

回答

1

试着改变你的代码CreditCardInfoObject

public class CreditCardInfoObject implements Serializable { 

    public String title; 
    public String startTime; 
    public String endTime; 
    public String day; 

    public CreditCardInfoObject() { 
    } 

    public CreditCardInfoObject(String title, String startTime, String endTime, String day) { 
     this.title = title; 
     this.startTime = startTime; 
     this.endTime = endTime; 
     this.day = day; 
    } 

    @Exclude 
    public Map<String, Object> toMap() { 
     HashMap<String, Object> result = new HashMap<>(); 
     result.put("title", title); 
     result.put("startTime", startTime); 
     result.put("endTime", endTime); 
     result.put("day", day); 

     return result; 
    } 

} 

MainActivity更改您的代码像下面

String title = "foo"; 
String startTime = "bar"; 
String endTime = "1"; 
String day = "2"; 

final FirebaseDatabase database = FirebaseDatabase.getInstance(); 
String uid = ""; 
FirebaseAuth auth = FirebaseAuth.getInstance(); 
FirebaseUser user = auth.getCurrentUser(); 
if (user != null) { 
    uid = user.getUid(); 
} 

final Map<String, Object> dataMap = new HashMap<String, Object>(); 
CreditCardInfoObject creditCardInfoObject = new CreditCardInfoObject(title,startTime,endTime,day); 

DatabaseReference ref = database.getReference("users").child(uid).child("account"); 
dataMap.put("creditcards", creditCardInfoObject.toMap()); 
ref.updateChildren(dataMap); 

欲了解更多信息:Firebase Documentation

希望它的工作。有事尽管问我。

1

所有你需要添加到您的POJO类的第一,需要的火力地堡的无参数constructot和public setterspublic getters每个字段是这样的:

public class CreditCardInfoObject implements Serializable { 
    private String title; 
    privat eString startTime; 
    private String endTime; 
    private String day; 

    public CreditCardInfoObject() {} 

    public String getTitle() {return title;} 
    public void setTitle(String title) {this.title = title;} 

    public String getStartTime() {return startTime;} 
    public void setStartTime(String startTime) {this.startTime = startTime;} 

    public String getEndTime() {return endTime;} 
    public void setEndTime(String endTime) {this.endTime = endTime;} 

    public String getDay() {return day;} 
    public void setDay(String day) {this.day = day;} 
} 

请注意,你不需要静态领域。还要注意,那i set all your fields as private。将这些字段设置为公开是非常糟糕的做法。

现在,要设置POJO类的值,需要创建CreditCardInfoObject类的新对象并使用公用设置器。有了这个新对象,您可以将其保存到Firebase数据库,如下所示:

CreditcardinfoOjbect obj = new CreditcardinfoOjbect(); 
obj.setTitle("foo"); 
obj.setStartTime("bar"); 
obj.setEndTime("1"); 
obj.setDay("2"); 

DatabaseReference rootRef = FirebaseDatabase.getInstance().getReference(); 
String uid = ""; 
FirebaseAuth auth = FirebaseAuth.getInstance(); 
FirebaseUser user = auth.getCurrentUser(); 
if (user != null) { 
    uid = user.getUid(); 
} 
DatabaseReference ref = rootRef.child("users").child(uid).child("account").child("creditcards"); 
ref.setValue(obj);