2017-07-31 14 views
0

私はFirebaseに以下の構造を有する:ここではFirebaseの要素内のリストを取得するには?

"surveys" : { 
"-Kq2r56mEoZ0LDBbi47W" : { 
    "name" : "Survey 1", 
    "questions" : [ { 
    "name" : "Question 1" 
    },{ 
    "name" : "Question 2" 
    },{ 
    "name" : "Question 3" 
    } ]  
} 

は、対応するJavaクラスはSurvey.javaです:

私の活動の
public class Survey { 
    private String name; 
    private ArrayList<String> questions = new ArrayList<>(); 

    public Survey(){} 
    // Getters and setters 
    ... 
} 

私はこのような調査の要素を取得しよう:

final DatabaseReference surveysReference = database.getReference(FirebaseReferences.SURVEY_REFERENCE).child(currentId); 
surveysReference.addListenerForSingleValueEvent(new ValueEventListener() { 
    @Override 
    public void onDataChange(DataSnapshot snapshot) { 
     SurveyDao survey = snapshot.getValue(SurveyDao.class); 
     surveyList.add(survey); 
    } 

    @Override 
    public void onCancelled(DatabaseError firebaseError) { 
     System.out.println("The read failed: " + firebaseError.getMessage()); 

    } 
}); 

しかし、構造が正しくないためにエラーが発生しています。 「質問」リストを取得して調査オブジェクトに保存するにはどうすればよいですか?あなたのrespone調査に予め

+0

あなたはjsonからの応答クラスを作成するためにhttp://www.jsonschema2pojo.org/を使うことができます –

答えて

0

質問を次のようになります。

List<Map<String, String>> 

の代わり:

@IgnoreExtraProperties 
public class Question { 

    public String name; 

    public Question() { 
     // Default constructor required for calls to DataSnapshot.getValue(Question.class) 
    } 

    public Question(String name) { 
     this.name = name; 
    } 

} 

とそれ:

List<String> 

あなたはまた、質問クラスを作成することができますウィ次のようになります。

List<Question> 

Firebase documentationを確認してください。あなたの調査のクラスがこのようであれば

0

おかげで

import java.util.List; 
import com.google.gson.annotations.Expose; 
import com.google.gson.annotations.SerializedName; 

public class Kq2r56mEoZ0LDBbi47W { 

@SerializedName("name") 
@Expose 
private String name; 
@SerializedName("questions") 
@Expose 
private List<Question> questions = null; 

public String getName() { 
return name; 
} 

public void setName(String name) { 
this.name = name; 
} 

public List<Question> getQuestions() { 
return questions; 
} 

public void setQuestions(List<Question> questions) { 
this.questions = questions; 
} 

} 

と質問クラスがある

import com.google.gson.annotations.Expose; 
import com.google.gson.annotations.SerializedName; 

public class Surveys { 

@SerializedName("-Kq2r56mEoZ0LDBbi47W") 
@Expose 
private Kq2r56mEoZ0LDBbi47W kq2r56mEoZ0LDBbi47W; 

public Kq2r56mEoZ0LDBbi47W getKq2r56mEoZ0LDBbi47W() { 
return kq2r56mEoZ0LDBbi47W; 
} 

public void setKq2r56mEoZ0LDBbi47W(Kq2r56mEoZ0LDBbi47W kq2r56mEoZ0LDBbi47W) { 
this.kq2r56mEoZ0LDBbi47W = kq2r56mEoZ0LDBbi47W; 
} 

} 

とKq2r56mEoZ0LDBbi47Wクラスのようなあなたの調査のクラスを経由して質問リストが含まれていることを別のオブジェクトieKq2r56mEoZ0LDBbi47Wが含まれています:

import com.google.gson.annotations.Expose; 
import com.google.gson.annotations.SerializedName; 

public class Question { 

@SerializedName("name") 
@Expose 
private String name; 

public String getName() { 
return name; 
} 

public void setName(String name) { 
this.name = name; 
} 

} 
あなたの 調査
0

public class Survey { 
    private String name; 
    private ArrayList<String> questions = new ArrayList<>(); 

    public Survey(){} 
    // Getters and setters 
    ... 
} 

を次に、あなたのfirebase構造は次のようにする必要があります:

"surveys" : { 
    "-Kq2r56mEoZ0LDBbi47W" : { 
     "name" : "Survey 1", 
     "questions" : [ 
      { 
       0 : "Question 1" 
      },{ 
       1 : "Question 2" 
      },{ 
       2 : "Question 3" 
      } 
     ]  
} 

は、ArrayListのか、リストを覚えて、地図のようなものですが、integerなどを使用してインデックス。そしてそれは0から始まる

関連する問題