0

When i'm using FirebaseListAdapter it seems to return an empty list, with no error attached.

Yes, I've doubled checked that my firebaseDatabase isn't empty, and I've also put dump values just for check, still nothing.. Please help me :(

PrivateChat Activity :

import android.database.DataSetObserver;
import android.support.annotation.NonNull;
import android.support.design.widget.FloatingActionButton;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.text.format.DateFormat;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.EditText;
import android.widget.ListAdapter;
import android.widget.ListView;
import android.widget.TextView;
import android.widget.Toast;

import com.firebase.ui.database.FirebaseListAdapter;
import com.firebase.ui.database.FirebaseListOptions;
import com.google.firebase.FirebaseOptions;
import com.google.firebase.auth.FirebaseAuth;
import com.google.firebase.database.ChildEventListener;
import com.google.firebase.database.DataSnapshot;
import com.google.firebase.database.DatabaseError;
import com.google.firebase.database.DatabaseReference;
import com.google.firebase.database.FirebaseDatabase;
import com.google.firebase.database.Query;

import java.sql.Time;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Date;
import java.util.Iterator;
import java.util.List;
import java.util.ListIterator;

public class PrivateChatActivity extends AppCompatActivity implements View.OnClickListener {

// Variables
private String chatRoomName;
private ArrayAdapter<ChatMessage> listOfMessages;

// UI
private ListView listView;
private FloatingActionButton btnSend;
private EditText etInputText;

// Firebase
private FirebaseAuth auth;
private DatabaseReference mRefRead;
private DatabaseReference mRefWrite;

//
private FirebaseListAdapter<ChatMessage> adapter;
//



@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_private_chat);

    // UI
    listView = (ListView)findViewById(R.id.list_of_messages);
    etInputText = (EditText)findViewById(R.id.text_input);
    btnSend = (FloatingActionButton)findViewById(R.id.fab);
    btnSend.setOnClickListener(this);

    // Variables
    listOfMessages = new ArrayAdapter<ChatMessage>(this, R.layout.item_chat_message);

    // Firebase
    auth = FirebaseAuth.getInstance();
    chatRoomName = "ChatRoomOf: " + auth.getCurrentUser().getUid() + " + " + "NULL";

    displayChatMessages();
}

private void displayChatMessages() {
    Query query = FirebaseDatabase.getInstance().getReference().child("Chats").child(chatRoomName);
    FirebaseListOptions<ChatMessage> options = new FirebaseListOptions.Builder<ChatMessage>()
            .setQuery(query, ChatMessage.class)
            .setLayout(R.layout.item_chat_message)
            .build();

    adapter = new FirebaseListAdapter<ChatMessage>(options) {
        @Override
        protected void populateView(View v, final ChatMessage model, int position) {
            //Get reference to the views of list_item_chat_messages.xml
            TextView messageText, messageUser, messageTime;
            messageText = (TextView) v.findViewById(R.id.message_text);
            messageUser = (TextView) v.findViewById(R.id.message_user);
            messageTime = (TextView) v.findViewById(R.id.message_time);


            messageText.setText(model.getMessageText());
            messageUser.setText(model.getMessageUser());
            messageTime.setText(DateFormat.format("HH:mm", model.getMessageTime()));
        }
    };
    listView.setAdapter(adapter);
}


@Override
public void onClick(View v) {
    if(v == btnSend){
            Firebasedatabase.getInstance().getReference().child("Chats").child(chatRoomName.push().setValue(new ChatMessage(etInput.getText().toString(), auth.getCurrentUser().getEmail()));
            etInputText.setText("");
        }
    }
}

ChatMessage Activity:

import java.util.Date;

public class ChatMessage {
    private String messageText;
    private String messageUser;
    private long messageTime;

    public ChatMessage(String messageText, String messageUser) {
        this.messageText = messageText;
        this.messageUser = messageUser;

        messageTime = new Date().getTime();
    }

    public ChatMessage() {
    }

    public String getMessageText() {
        return messageText;
    }

    public void setMessageText(String messageText) {
        this.messageText = messageText;
    }

    public String getMessageUser() {
        return messageUser;
    }

    public void setMessageUser(String messageUser) {
        this.messageUser = messageUser;
    }

    public long getMessageTime() {
        return messageTime;
    }

    public void setMessageTime(long messageTime) {
        this.messageTime = messageTime;
    }
}

item_chat_message.xml :

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical" android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:layoutDirection="ltr"
    android:descendantFocusability="blocksDescendants">

    <TextView
        android:id="@+id/message_text"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentStart="true"
        android:layout_below="@id/message_user"
        android:layout_marginTop="5dp"
        android:text="User text here"
        android:padding="10dp"
        android:textAppearance="@style/TextAppearance.AppCompat.Body1"
        android:textSize="18sp" />

    <TextView
        android:id="@+id/message_user"
        android:layout_alignParentTop="true"
        android:layout_alignParentStart="true"
        android:textStyle="normal|bold"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" />

    <TextView
        android:id="@+id/message_time"
        android:layout_alignParentBottom="@+id/message_user"
        android:layout_alignParentEnd="true"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" />

</RelativeLayout>

Grandle app module:

apply plugin: 'com.android.application'

android {
    compileSdkVersion 27
    defaultConfig {
        applicationId "..."
        minSdkVersion 17
        targetSdkVersion 27
        versionCode 1
        versionName "1.0"
        testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
}

dependencies {
    implementation fileTree(dir: 'libs', include: ['*.jar'])
    implementation 'com.android.support:appcompat-v7:27.0.2'
    implementation 'com.android.support.constraint:constraint-layout:1.0.2'
    implementation 'com.google.firebase:firebase-database:11.8.0'
    implementation 'com.google.firebase:firebase-auth:11.8.0'
    testImplementation 'junit:junit:4.12'
    androidTestImplementation 'com.android.support.test:runner:1.0.1'
    androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.1'
    compile 'com.android.support:design:27.0.2'
    compile 'com.google.android.gms:play-services-maps:11.8.0'

    //
    implementation 'com.firebaseui:firebase-ui-database:3.1.3'
    //
}



apply plugin: 'com.google.gms.google-services'
Vadim Kotov
  • 8,084
  • 8
  • 48
  • 62
Dor Dahan
  • 391
  • 2
  • 5
  • 10

0 Answers0