RecyclerView没有被来自firebase的项目填充,只是一个空白的活动页面。

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了RecyclerView没有被来自firebase的项目填充,只是一个空白的活动页面。相关的知识,希望对你有一定的参考价值。

我对android和firebase还是比较陌生的,我试图从firebase数据库中填充recyclerview,但由于一些我无法理解的原因,该视图没有被填充,活动加载了,但我看到的是一个空白的活动页面,我想使用Firebase数据库中的数据来填充这些视图,只是为了获得用户的三个数据(姓名,电子邮件,电话)。

public class TestUsersActivity extends AppCompatActivity {
public TextView mname,email,phone;
private RecyclerView recyclerView;
FirebaseAuth mAuth;
DatabaseReference mDatabase;
private FirebaseRecyclerAdapter adapter;
private LinearLayoutManager linearLayoutManager;

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

    recyclerView = findViewById(R.id.listuser);
    mDatabase = FirebaseDatabase.getInstance().getReference().child("Users");
    linearLayoutManager = new LinearLayoutManager(getApplicationContext());
    linearLayoutManager.setReverseLayout(true);
    linearLayoutManager.setStackFromEnd(true);
    recyclerView.setHasFixedSize(true);
    recyclerView.setLayoutManager(linearLayoutManager);

    fetch();

}

private void fetch() {

    FirebaseRecyclerOptions<Users> options = new FirebaseRecyclerOptions.Builder<Users>()
            .setQuery(mDatabase,Users.class)
            .build();

    adapter = new FirebaseRecyclerAdapter<Users, ViewHolder>(options) {
        @Override
        protected void onBindViewHolder(@NonNull ViewHolder myViewHolder, int i, @NonNull Users users) {
            myViewHolder.setName(users.getFname() + " "+ users.getLname());
            myViewHolder.setEmail(users.getEmail());
            myViewHolder.setphone(users.getPhonenos());


        }

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

        @Override
        public void onDataChanged() {
            super.onDataChanged();
        }
    };

    recyclerView.setAdapter(adapter);
    adapter.startListening();
}

@Override
protected void onStop() {
    super.onStop();
    adapter.stopListening();
}

    public class ViewHolder extends RecyclerView.ViewHolder {

        public ViewHolder(View itemView) {
            super(itemView);
            mname = itemView.findViewById(R.id.name);
            email = itemView.findViewById(R.id.email);
            phone = itemView.findViewById(R.id.phoneNos);
        }

        public void setName(String string) {
            mname.setText(string);
        }


        public void setEmail(String string) {
            email.setText(string);
        }
        public void setphone(String string){
            phone.setText(string);
        }
    }

}

下面是我的modelclass,我只想获取姓名、电子邮件和电话号码。

public class Users {
private String fname;
private String lname;
private String email;
private String phonenos;
private String jobTitle;
private String dateCreated;
private String lastlogin;

public Users(){

}


public Users(String fname, String lname, String email, String phonenos, String jobTitle, String dateCreated, String lastlogin) {
    this.fname = fname;
    this.lname = lname;
    this.email = email;
    this.phonenos = phonenos;
    this.jobTitle = jobTitle;
    this.dateCreated = dateCreated;
    this.lastlogin = lastlogin;

}

public String getFname() {
    return fname;
}

public void setFname(String fname) {
    this.fname = fname;
}

public String getLname() {
    return lname;
}

public void setLname(String lname) {
    this.lname = lname;
}

public String getEmail() {
    return email;
}

public void setEmail(String email) {
    this.email = email;
}


public String getPhonenos() {
    return phonenos;
}

public void setPhonenos(String phonenos) {
    this.phonenos = phonenos;
}

public String getJobTitle() {
    return jobTitle;
}

public void setJobTitle(String jobTitle) {
    this.jobTitle = jobTitle;
}

public String getDateCreated() {
    return dateCreated;
}

public void setDateCreated(String dateCreated) {
    this.dateCreated = dateCreated;
}

public String getLastlogin() {
    return lastlogin;
}

public void setLastlogin(String lastlogin) {
    this.lastlogin = lastlogin;
}

}

enter image description here

答案

我不知道是否一定要通过查询而不是数据库引用

将查询作为成员变量

......
private Query query;
......

这样做。

query = FirebaseDatabase.getInstance().getReference().child("Users");

然后像这样传给选项

FirebaseRecyclerOptions<Users> options = new FirebaseRecyclerOptions.Builder<Users>()
        .setQuery(query,Users.class)
        .build();

另外,还要确保你的消防基地安全规则没有设置为读为假。

以上是关于RecyclerView没有被来自firebase的项目填充,只是一个空白的活动页面。的主要内容,如果未能解决你的问题,请参考以下文章

Recyclerview 未显示来自 Firebase Kotlin 的数据

我如何使用来自firebase的数据制作recyclerview,并有意图地点击

可扩展的自定义 CardView 不显示来自 Firebase 的 RecyclerView 的所有内容

来自 Firebase 的 RecyclerView 图像无法加载三个活动中的一个 [重复]

Cant Firebase 在单个 RecyclerView 中显示来自多个引用的数据

Android:在 Recyclerview 中更改图像旋转