如何从Android中保存Firebase数据库中的数据数组?

时间:2017-06-19 05:28:52

标签: android firebase firebase-realtime-database

我是 Firebase数据库的新用户,我只想保存Firebase数据库中的数据数组。当我试图保存它显示错误。下面我在保存数据时提到了 POJO Class Logcat 错误。

POJO班级编码

@IgnoreExtraProperties
public class StudentReviews {

public String student_name;
public String student_class;
public String student_image;
public String student_section;

public ArrayList<Reviews> reviewsList = new ArrayList<>();

public void StudentReviews() {}

public class Reviews {
        public String subject;
        public String marks_taken;
        public String total_marks;
        public String teacher;
    }
}

保存数据

StudentReviews studentReviews = new StudentReviews();
studentReviews.student_name = et_studentName.getText().toString();
studentReviews.student_class = et_student_class.getText().toString();
studentReviews.student_image = "";
studentReviews.student_section = sp_section.getSelectedItem().toString();
studentReviews.reviewsList = reviewsArray;

dbUploadReview.push().setValue(studentReviews); //165th Line in Logcat Error

Logcat错误

com.google.firebase.database.DatabaseException: Invalid key: this$0. Keys must not contain '/', '.', '#', '$', '[', or ']'
at com.google.android.gms.internal.zzbtf.zzjq(Unknown Source)   
at com.google.android.gms.internal.zzbtf.zzay(Unknown Source)
at com.google.android.gms.internal.zzbtf.zzay(Unknown Source)
at com.google.android.gms.internal.zzbtf.zzay(Unknown Source)  
at com.google.firebase.database.DatabaseReference.zza(Unknown Source)
at com.google.firebase.database.DatabaseReference.setValue(Unknown Source)
at com.trending.trendingadmin.fragment.WriteReview.uploadReviews(WriteReview.java:165)

当我完全删除Firebsae数据库中保存的 POJO Class 数据中的public ArrayList<Reviews> reviewsList = new ArrayList<>(); reviewsList时。

任何人都知道帮我解决这个问题。

更新

我通过两种方式解决了这个问题。由 OlegOsipenko

提供的建议
  

1)将内部类设为静态

     

2)将内部类移动到另一个文件。

现在它的工作和我预期的一样好。

2 个答案:

答案 0 :(得分:1)

.setValue()方法需要List而不是Array。您可以使用对象列表。

Firebase ref = new Firebase("<my-firebase-app>/names"):
String[] names = {"John","Tim","Sam","Ben"};
List nameList = new ArrayList<String>(Arrays.asList(names));
// Now set value with new nameList
ref.setValue(nameList);

Read the Firebase docs for more information.

答案 1 :(得分:1)

由于您的Logcat错误显示Keys must not contain '/', '.', '#', '$', '[', or ']',这意味着这些符号中的每一个都不允许作为Firebase database中的密钥。

为了将数据对象写入您的Firebase数据库,我建议您使用List而不是使用Map。您还需要在pojo类中进行此更改。要保存数据,请使用以下代码:

DatabaseReference rootRef = FirebaseDatabase.getInstance().getReference();
DatabaseReference namesRef = rootRef.child("names");
Map<String, Object> map = new HashMap<>();
map.put("nameId1", "John");
map.put("nameId2", "Tim");
map.put("nameId3", "Sam");
//and os on
namesRef.updateChildren(map);

希望它有所帮助。