如何从Android中保存Firebase数据库中的数据数组?
问题描述:
我是新来的Firebase数据库,我只想保存Firebase数据库中的数据数组。当我试图保存它显示错误。下面我提到了POJO类和Logcat保存数据时出错。如何从Android中保存Firebase数据库中的数据数组?
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)
当我除去叔他的public ArrayList<Reviews> reviewsList = new ArrayList<>();
reviewsList在POJO类完美保存在Firebsae数据库中的数据。
任何人都知道帮我解决这个问题。
更新
我通过两种方式解决了这个问题。通过OlegOsipenko
1中给出建议)使内部类为静态
2)移动的内类到另一个文件。
现在它的工作很好,并且我期望的很好。
答
.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);
答
当你的logcat的错误说Keys must not contain '/', '.', '#', '$', '[', or ']'
,这意味着该符号中的每一个不允许在Firebase database
的关键。
为了数据对象写信给你的火力地堡的数据库,在使用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);
希望它有帮助。
WriteReview.java的第165行是什么? –
也请提供[mcve]。 –
@Yugesh您的数据不得包含'/','。','#','$','['或']',这意味着您的数据主体或教师或标记或dbUploadReview可能具有该符号。一次只有字符或数字才能找到相同的问题。 –