2017-08-18 4 views
1

私のモデルクラスで、親ノードと子ノードの両方から同時にデータを取得したいと考えています。たとえば、firebaseから同じgetValue(user.class)メソッドを使用して、親と子の値を取得するにはどうすればよいですか?

Students: { 
     Student1: { 
      id: 1, 
      name: "Sam", 
      regNo: "15001" 
       1stSmester: { 
         c: 70, 
        dataStructures:80, 
         }, 
       2ndSemester: { 
         CPlus:85, 
         sql:68 
         } 
       } 
     Student2: { 
       id:2, 
       name:"Rob", 
       regNo:"15002" 
       1stSemester: { 
         c:59, 
         dataStructures:77 
         }, 
       2ndSemester: { 
         CPlus:60, 
         sql: 85 
          } 
        } 

私はstudent1とstudent2からすべてのデータを取得するのですか?したがって、その親は、2つの別々のオブジェクトとして1stSemesterと2ndSemesterの子値を評価し、それを自分のモデルクラスにマッピングします。

ご協力いただきありがとうございます。

+0

あなたのデータ構造は、フラットなデータモデルを維持するFirebaseのベストプラクティスに反するように思われます。その点とその広範な点を考慮して、[Android用Firebaseのドキュメント](https://firebase.google.com/docs/database/android/start/)を勉強し、[Androidのコードラップ](https ://codelabs.developers.google.com/codelabs/firebase-android/) –

+0

はい、私はそうするでしょう。しかし、私は上記のデータ構造をどのようにフラットにすることができるかを教えてください。私はfirebaseを初めて使っているので、私はあまり知られていません。また、私のアプリでは、学生を1つのオブジェクトとして取って、それをrecyclerViewに表示する必要があります。フラットなデータモデルでこれを行うことはできますか? –

答えて

1

学生と学期のクラス

class Students { 
int id; 
String name, regNo; 
Semester semester1, semester2; 

public Semester getSemester1() { 
    return semester1; 
    } 
    ... 
} 
class Semester { 
    String courseName; 
    double result; 
} 

UPDATE

内部クラス作り、私はこのようなもので、あなたのモデルが想像します外に宣言されなければならず、セッターとゲッターは内部クラスオブジェクトに設定されます。

コールデータの

FirebaseDatabase.getInstance().getReference().child("Students") 
    .addValueEventListener(new ValueEventListener(){ 
    @Override 
    public void onDataChange(DataSnapshot dataSnapshot){ 
    if(dataSnapshot.exists()){ 
    ArrayList<Student> allStudents= 
    (ArrayList<Student>)dataSnapshot.getValue(); 
    } 

    @Override 
    public void onCancelled(DatabaseError databaseError){ 

    } 
    }); 
    } 
+0

あなたのコードを試しましたが、firebaseの内部オブジェクトを取得する方法はありますか?私はゲッターを試しましたが、値0を示します。 –

+0

内部クラスにゲッターセッターを与えましたか? –

+0

あなたのコードを試しましたが、サブクラスを外部クラスとして宣言しました。内部クラスを作成すると、databaseExceptionが表示されるためです。それ以外の場合はすべてOKです。 –

0

Gsonライブラリを使用してモデルを逆シリアル化することができます。

Class Student{ 
    int id,regNo; 
    String name; 
    Semester 1stSemester; 
    Semester 2ndSemester; 

class Semester{ 
    int c; 
    int CPlus; 
    int sql; 
    int dataStructures; 
    } 
} 

、あなたのコードを使用している:

Gson gson = new Gson(); 
gson.fromJson(yourResponse,Student.class); 
+0

Firebaseの 'DataSnapshot'から' yourResponse'をどのように得ることができるでしょうか? –

+0

私はあなたがオブジェクトを返すので、getValueを使ってみることができると思います。文字列にキャストします。 –

+0

@Rahim私はあなたのGsonコードを本当に理解していません。 getValue()でgsonを使用するにはどうすればよいのですか? –

関連する問題