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

如何从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)移动的内类到另一个文件。

现在它的工作很好,并且我期望的很好。

+0

WriteReview.java的第165行是什么? –

+0

也请提供[mcve]。 –

+0

@Yugesh您的数据不得包含'/','。','#','$','['或']',这意味着您的数据主体或教师或标记或dbUploadReview可能具有该符号。一次只有字符或数字才能找到相同的问题。 –

.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.

当你的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); 

希望它有帮助。

+0

感谢您的建议。我解决了这个问题。 – Yugesh

+0

你用这种方法解决了这个问题吗? –

+0

不,请参阅我的问题更新。 – Yugesh