【问题标题】:RecyclerView is not being populated with items from firebase just a blank Activity PageRecyclerView 没有填充来自 firebase 的项目,只是一个空白的活动页面
【发布时间】:2020-04-22 08:24:14
【问题描述】:

我对 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);
        }
    }

}

下面是我的模型类,我只想从中获取姓名、电子邮件和电话号码。

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;
}

}

【问题讨论】:

  • 显示数据库节点用户的屏幕截图。
  • @HasanBouTaam,已按要求添加屏幕截图。

标签: android firebase android-recyclerview


【解决方案1】:

我不知道您是否必须传递查询而不是数据库引用

将查询设为成员变量

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

这样做:

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

并像这样将其传递给选项

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

还要确保您的 Firebase 安全规则未设置为错误

【讨论】:

    猜你喜欢
    • 2020-10-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-30
    • 1970-01-01
    • 1970-01-01
    • 2014-04-09
    • 1970-01-01
    相关资源
    最近更新 更多