2016-08-30 6 views
1

firebase push()関数を使用しようとしています。既存のリストにデータを追加する必要があります。 setValue()関数は、既存のデータを上書きします。firebaseへのデータのプッシュリストが機能しない

これは私が行うために使用するものである:

DatabaseReference childref = mDatabase.child("users").child(uih.getUserData().getUsername()).child("answered_questions"); 
         childref.setValue(getAnsweredQuestions(questionViewList)); 

これは働いていたが、私は使用するたびに、この関数は、データが上書きされており、これは私が欲しいものではありません。私は、firebaseの文書で説明されているようにプッシュ機能を使ってみました:https://firebase.google.com/docs/database/android/save-data

私はそれを正しくやっているのか分かりませんが、うまくいきません。

DatabaseReference childref = mDatabase.child("users").child(uih.getUserData().getUsername()).child("answered_questions"); 
        String key = childref.push().getKey();  
        Map<String, Object> childUpdates = new HashMap<>(); 
        childUpdates.put(key, questionViewList); 
        mDatabase.updateChildren(childUpdates); 

私が得る例外は次のとおりです:

com.google.firebase.database.DatabaseException: Failed to parse node with class class scrambled.nl.generationr.QuestionView 

とのsetValueをしながら、私はこのエラーを受け取っていないので、これは、奇妙である私がプッシュ()関数を実装しようとしたとき、これはあります方法。誰が私が間違っていることを説明し、どのようにfirebaseにリストをプッシュする必要がありますか?

編集:

私は何ができるかは、次のとおりです。

DatabaseReference childref = mDatabase.child("users").child(uih.getUserData().getUsername()).child("answered_questions"); 
          childref.push().setValue(getAnsweredQuestions(questionViewList)); 

では、ここでプッシュ()を追加。これは機能しますが、私のリストを増やす代わりにリストに別のレイヤーを追加するので、実際には長いリストの代わりに配列の配列が得られます。

結果はこちらをご覧ください:

enter image description here

+0

データベース構造のサンプルを提供してください。私はそれが各ユーザーのように見えるコードに基づいて、 "respond_questions"と呼ばれる子の場所があります。そのユーザーに質問に回答した新しい質問を追加しようとしていますか? –

+0

それは確か私がやろうとしていることです:各ユーザーはanswed_questionのリストを持っていて、リスト(Javaオブジェクト)をこのリストに追加したいです – Jasper

+1

ok ...私はそれを手助けすることができます –

答えて

1

の保存にAnsweredQuestionオブジェクトのリスト:

これは、Javaオブジェクトができるように、あなたのAnsweredQuestion.classを設計するとき、あなたがルールに従ってきたと仮定しをFirebaseにデータを保存するために使用されます。ドキュメントにデータを保存するための「基本的な書き込み操作」見出しの下で、そのチェックのガイダンスが必要な場合。 .addListenerForSingleValueEvent()はただ一つの方法です使用して、各ユーザーの答えを取得するための複数の方法があります

//create List to store AnsweredQuestion object 
List<AnsweredQuestion> mAllAnswers = new ArrayList<AnsweredQuestion>(); 
... 

ref.addListenerForSingleValueEvent(new ValueEventListener() { 
     @Override 
     public void onDataChange(DataSnapshot dataSnapshot) { 
      //iterate over datasnapshot to get/store each AnsweredQuestion object 
      if(datSnapshot.exists()){ 
       for(DataSnapshot snapshot : dataSnapshot.getChildren()){ 
        AnsweredQuestion answer = snapshot.getValue(AnsweredQuestion.class); 
        mAllAnswers.add(answer); 
       } 
      } 
     } 

     @Override 
     public void onCancelled(DatabaseError databaseError) { 
      //handle error 
     } 
}); 

//List of AnsweredQuestions 
List<AnsweredQuestion> mAllAnswers; 
.... 

//create the database reference that points to the correct parent node 
//where answeres are stored for each user  
DatabaseReference ref = mDatabase.child("users").child(uih.getUserData().getUsername()).child("answered_questions"); 

//Iterate over your List of AnsweredQuestion objects and use push() along with setValue() 
//to store a single AnsweredQuestion object to a unique location in your database. 
for(AnsweredQuestion answer : mAllAnswers){ 
    ref.push().setValue(answer); 
} 

は、すべてのユーザーのための質問に答え取り出します。回答をListViewまたはRecyclerViewに表示する場合は、FirebaseListAdapterまたはFirebaseRecyclerAdapterを使用することもできます。

関連する問題