RecyclerView没有显示我的预期输出

时间:2019-04-04 05:15:01

标签: android firebase-realtime-database android-recyclerview

我希望将Firebase中的数据打印到recyclerview列表中。 循环是正确的,但是并没有替换我的数据。

这是来自track_record代码。

 private void readData(){

    reference = FirebaseDatabase.getInstance().getReference("FireAlarm");
    reference.addValueEventListener(new ValueEventListener() {
        @Override
        public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
            dataList.clear();
            for (DataSnapshot snapshot : dataSnapshot.getChildren()){
                    Data data = snapshot.getValue(Data.class);
                    dataList.add(data);
            }
            recordAdapter = new RecordAdapter(track_record.this,dataList);
            recyclerView.setAdapter(recordAdapter);
        }

        @Override
        public void onCancelled(@NonNull DatabaseError databaseError) {

        }
    });
}

这是来自我的适配器

@NonNull
@Override
public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
    View view = LayoutInflater.from(context).inflate(R.layout.item_data,parent,false);
    return new RecordAdapter.ViewHolder(view);
}

@Override
public void onBindViewHolder(@NonNull ViewHolder holder, int position) {
    Data data = dataList.get(position);
    holder.outputData.setText(data.getAlarm());
}

@Override
public int getItemCount() {
    return dataList.size();
}

public class ViewHolder extends RecyclerView.ViewHolder {

    TextView outputData;
    public ViewHolder(View itemView){
        super(itemView);

        outputData = itemView.findViewById(R.id.dataFetch);
    }
}

这是来自xml的数据,应该替换

 <TextView
    android:id="@+id/dataFetch"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:hint="data"
    android:textSize="20dp"
    android:textAlignment="center"
    android:background="#F5B6B6"
    android:textColor="#000000"/>

这是我的数据库

my database look like this

这是当前输出 this is the current output

2 个答案:

答案 0 :(得分:0)

您应该使用addChildEventListener而不是addValueEventListener,并在onChildAdded内编写代码。

您可以从documentation中找到解释:

  

使用列表时,您的应用程序应侦听孩子   事件,而不是用于单个对象的值事件。

答案 1 :(得分:0)

您必须将子值事件侦听器添加到FireAlarm,该侦听器将被附加到DatabaseReference对象(在您的代码中该对象为reference),方法是调用{{1 }}方法,并在每次添加,删除,更改,..., 您的onChildAdded()应该按照以下方式重写:

readData