2017-06-07 2 views
0

に私はFirebaseを使用して、生徒と教師のプライベートメッセンジャーアプリケーションに取り組んでいますし、私はこのようなルート内のデータを挿入することができます。 my Firebase DBFirebaseリファレンスクエリは、ルート

ユーザ名は、MySQLデータベースからretrivedされているので、ちょうど私クエリを作成するだけです。私はチャットIDが私の生成されたIDと等しいリストビュー内のデータだけを取得したいと思います。私はhereのように多くの場所を検索しましたが、DatabaseReferenceが機能しません。ここに私のコードです:メッセージのみが表示されます。このコードを使用してアダプタを

rootRef = FirebaseDatabase.getInstance().getReference(); 
chatQuery = rootRef.orderByChild("chatID").equalTo("teststudent-testteacher..."); 
adapter = new FirebaseListAdapter<BubbleMessageStudent>(
    this, BubbleMessageStudent.class, R.layout.item_chat_right, chatQuery)... 

:@ cricket_007として

private void displayStudentChatMessages() { 
    listofMessages = (ListView) findViewById(R.id.list_msg); 

    adapter = new FirebaseListAdapter<BubbleMessageStudent>(this, BubbleMessageStudent.class, R.layout.item_chat_right, FirebaseDatabase.getInstance().getReference()) { 
     @Override 
     protected void populateView(View v, BubbleMessageStudent model, int position) { 
      TextView studentUsername = (TextView) v.findViewById(R.id.message_user_sender); 
      TextView studentMessage = (TextView) v.findViewById(R.id.message_user); 
      TextView studentSentDate = (TextView) v.findViewById(R.id.message_usertime); 

      studentUsername.setText(model.getStudentUsername()); 
      studentMessage.setText(model.getStudentMessage()); 

      studentSentDate.setText(android.text.format.DateFormat.format("yyyy-MM-dd%n(HH:mm:ss)", model.getStudentMessageTime())); 
     } 
    }; 

    listofMessages.setAdapter(adapter); 
    listofMessages.setTranscriptMode(ListView.TRANSCRIPT_MODE_ALWAYS_SCROLL); 
} 
+0

なぜgetReference()にパラメータを与えていないのですか? –

+0

しかし、あなたはどのように参照として根を得ることができますか? – DeluxeD

+0

あなたは何を持っているのですか? 'getReference(" chatapp-autosiskola ")'は私が意図したものですが、それは必要ではないかもしれません。 –

答えて

2

はコメントし、正しいIDとのチャットメッセージを取得するクエリが必要になります正しいチャットIDで

しかし、一般に、あなたのデータモデルは最適ではないようです。基本的にMySQLデータベースのテーブルをFirebaseのノードにマップしました。おそらく今のところうまくいくかもしれませんが、このマッピングを行うためのより良い方法があります。

Firebase(および他の多くのNoSQLデータベース)では、画面に表示する内容をモデル化する必要があります。同じチャットIDを持つメッセージのリスト:

chatId1 
    chat1Message1: ... 
    chat1Message2: ... 
    chat1Message3: ... 
chatId2 
    chat2Message1: ... 
    chat2Message2: ... 
    chat2Message3: ... 

このような構成とすることにより、あなたのアプリが同じchatIDとメッセージのリストであるチャットルームを、示したのであれば、あなたは、そのデータベースが正確にモデル化する必要があります特定のチャットルームのメッセージを読むためのクエリは必要ありません。代わりに、下にあるノードに直接アクセスできます。

chatRoom = rootRef.child("teststudent-testteacher..."); 
adapter = new FirebaseListAdapter<BubbleMessageStudent>(
    this, BubbleMessageStudent.class, R.layout.item_chat_right, chatRoom)... 

この結果、スケーラビリティが大幅に向上します。

NoSQL data modelingを読んで、Firebase for SQL developersをご覧ください。