RecyclerView未按预期显示数据库内容

时间:2020-04-03 16:28:38

标签: android firebase android-recyclerview

这是我数据库中的数据:

Here's the data in my database

这是我的项目的代码。我没有发现错误。它不显示其中的内容,即使它显示的是空白页。

适配器


import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;

import androidx.annotation.NonNull;
import androidx.recyclerview.widget.RecyclerView;
import androidx.recyclerview.widget.RecyclerView.ViewHolder;

import java.util.ArrayList;

public class MylistAdapter extends RecyclerView.Adapter<MylistAdapter.MylistViewHolder> {
    private ArrayList<RequestUser> users;


    class MylistViewHolder extends RecyclerView.ViewHolder{

        private TextView dispname1;
        private TextView dispphn1;
        private TextView dispcity1;
        private TextView dispaddr1;
        private TextView dispnumber1;

        private MylistViewHolder(@NonNull View itemView) {
            super(itemView);
            dispaddr1=itemView.findViewById(R.id.dispaddr);
            dispcity1=itemView.findViewById(R.id.dispcity);
            dispname1=itemView.findViewById(R.id.dispname);
            dispphn1=itemView.findViewById(R.id.disphn);
            dispnumber1=itemView.findViewById(R.id.dispnumber);
        }
    }


    public MylistAdapter(ArrayList<RequestUser> usrs) {
        this.users= usrs;
    }


    @Override
    public MylistViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
        View v=LayoutInflater.from(parent.getContext()).inflate(R.layout.row_item,parent,false);
        MylistViewHolder mlvh=new MylistViewHolder(v);
        return mlvh;
    }

    @Override
    public void onBindViewHolder(@NonNull MylistViewHolder holder, int position) {

        RequestUser curuser=users.get(position);

        holder.dispphn1.setText(curuser.getRphn1());
        holder.dispname1.setText(curuser.getRname1());
        holder.dispcity1.setText(curuser.getRcity1());
        holder.dispaddr1.setText(curuser.getRaddr1());
        holder.dispnumber1.setText(curuser.getRnumber1());
    }

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

主类

其中包含主要功能


import androidx.annotation.NonNull;
import androidx.annotation.RequiresApi;
import androidx.appcompat.app.AppCompatActivity;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;

import android.os.Build;
import android.os.Bundle;
import android.widget.Toast;

import com.google.firebase.auth.FirebaseAuth;
import com.google.firebase.auth.FirebaseUser;
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.ValueEventListener;

import java.util.ArrayList;
import java.util.Objects;

public class Transport extends AppCompatActivity {

    private RecyclerView recyclerView;
    private RecyclerView.LayoutManager layoutManager;
    private RecyclerView.Adapter adapter;
    DatabaseReference dbreferance;
    FirebaseAuth firebaseAuth;
    FirebaseDatabase firebaseDatabase;
    private ArrayList<RequestUser> usrs=new ArrayList<>();


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

        firebaseAuth=FirebaseAuth.getInstance();
        firebaseDatabase=FirebaseDatabase.getInstance();
        dbreferance= FirebaseDatabase.getInstance().getReference().child("Donate");
        dbreferance.addValueEventListener(new ValueEventListener() {

            @Override
            public void onDataChange(@NonNull DataSnapshot dataSnapshot) {

                usrs.clear();
                for(DataSnapshot child:dataSnapshot.getChildren())
                {
                    //String id=child.getKey();
                    RequestUser usr=child.getValue(RequestUser.class);
                    usrs.add(usr);
                    //RequestUser usr= (RequestUser) child.getValue();
                    //usrs.add(usr);
                    //System.out.println(usr.rname1);
                    Toast.makeText(Transport.this,usr.getRphn1(),Toast.LENGTH_SHORT).show();
                }

            }

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

            }
        });
        recyclerView=(RecyclerView)findViewById(R.id.recyclerView);
        recyclerView.setHasFixedSize(true);
        layoutManager=new LinearLayoutManager(this);
        adapter=new MylistAdapter(usrs);
        recyclerView.setLayoutManager(layoutManager);
        recyclerView.setAdapter(adapter);


    }


}

XML布局

用于“回收者”视图和卡视图

<?xml version="1.0" encoding="utf-8"?>

<androidx.cardview.widget.CardView android:layout_width="match_parent"
    android:layout_height="wrap_content"
    xmlns:android="http://schemas.android.com/apk/res/android">

    <RelativeLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent">

        <TextView
            android:id="@+id/dispname"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="Line1"
            android:textColor="@android:color/black"
            android:textSize="30sp"
            android:textStyle="bold" />

        <TextView
            android:id="@+id/dispcity"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_below="@id/dispname"
            android:textSize="25sp"
            android:layout_marginStart="8dp"
            android:text="Line2"
            android:layout_marginLeft="8dp" />
        <TextView
            android:id="@+id/dispaddr"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_below="@id/dispcity"
            android:textSize="15sp"
            android:text="Line3"
            android:layout_marginLeft="16dp"/>
        <TextView
            android:id="@+id/disphn"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_below="@id/dispaddr"
            android:textSize="15sp"
            android:text="Line4"
            android:layout_marginLeft="24dp"/>
        <TextView
            android:id="@+id/dispnumber"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_below="@id/dispaddr"
            android:textSize="15sp"
            android:text="Line5"
            android:layout_marginLeft="24dp"/>
    </RelativeLayout>

</androidx.cardview.widget.CardView>

另一种布局

即查看名片

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".Transport">

    <androidx.recyclerview.widget.RecyclerView
        android:id="@+id/recyclerView"
        android:layout_width="match_parent"
        android:layout_height="match_parent"


        tools:layout_editor_absoluteY="1dp"
        tools:ignore="MissingConstraints" />
</RelativeLayout>

1 个答案:

答案 0 :(得分:0)

当我们添加侦听器时,Android为此创建一个单独的线程,并且该线程单独运行。因此,在您的情况下,我们要添加侦听器,android会为此创建单独的线程,然后立即为recyclerView设置适配器。

在添加侦听器之前创建适配器,并在for循环之后通过onDataChanged( )方法中的recyclerView设置适配器。

 @Override
        public void onDataChange(@NonNull DataSnapshot dataSnapshot) {

            usrs.clear();
            for(DataSnapshot child:dataSnapshot.getChildren())
            {
                //String id=child.getKey();
                RequestUser usr=child.getValue(RequestUser.class);
                usrs.add(usr);
                //RequestUser usr= (RequestUser) child.getValue();
                //usrs.add(usr);
                //System.out.println(usr.rname1);
                Toast.makeText(Transport.this,usr.getRphn1(),Toast.LENGTH_SHORT).show();
            }
            recyclerView.setAdapter(adapter);
        }