社区首页 >问答首页 >如何从Firebase获取数据并将其显示在回收视图中?

如何从Firebase获取数据并将其显示在回收视图中?
EN

Stack Overflow用户
提问于 2019-05-23 13:21:31
回答 3查看 352关注 0票数 1

我开发了一个聊天应用。我试图从firebase数据库中获取数据,并将其显示在回收视图中,但它不起作用。我在谷歌上搜索了一下,尝试了很多选项,但什么都没有显示。我做错了什么?以下是活动:

1.主活动(我想要显示数据的地方)

代码语言:javascript
代码运行次数:0
复制
public class SearchActivity extends AppCompatActivity {
Toolbar sToolbar;
SearchView searchView;
RecyclerView recyclerView;
BottomNavigationView sBnv;
SearchAdapter searchAdapter;
LinearLayoutManager llm;
ArrayList<String> arrayList;
User user;
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_search);

    sToolbar = findViewById(R.id.sToolbar);
    recyclerView = findViewById(R.id.sRecyclerView);
    sBnv = findViewById(R.id.sBnv);

    searchAdapter = new SearchAdapter(arrayList, getApplicationContext());
    recyclerView.setHasFixedSize(true);
    llm = new LinearLayoutManager(getApplicationContext());

    final DatabaseReference ref = FirebaseDatabase.getInstance().getReference().child("users");

    ref.addValueEventListener(new ValueEventListener() {
        @Override
        public void onDataChange(DataSnapshot dataSnapshot) {
            if (dataSnapshot.exists()) {
                for (DataSnapshot snapshot : dataSnapshot.getChildren()) {
                    String username = (String)
                            snapshot.child("username").getValue();
                    arrayList.add(username);

                }
                recyclerView.setLayoutManager(llm);
                recyclerView.setAdapter(searchAdapter);
            }
        }

        @Override
        public void onCancelled(DatabaseError databaseError) {
        Toast.makeText(SearchActivity.this, "Database error", Toast.LENGTH_SHORT)
                .show();
        }
    });

2.适配器类:

代码语言:javascript
代码运行次数:0
复制
public class SearchAdapter extends RecyclerView.Adapter<SearchAdapter.ViewHolder> {

ArrayList<String> friendsSearchedList = new ArrayList<>();
Context mContext;

public SearchAdapter(ArrayList<String> friendsSearchedList, Context mContext){
    this.friendsSearchedList = friendsSearchedList;
    this.mContext = mContext;
}

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

@Override
public void onBindViewHolder(@NonNull ViewHolder holder, int position) {
    final String username = friendsSearchedList.get(position);
    holder.text.setText(username);

}

@Override
public int getItemCount() {
return friendsSearchedList == null ? 0:friendsSearchedList.size();
}

public class ViewHolder extends RecyclerView.ViewHolder {
TextView text, text1, text2;
Button button;
RelativeLayout relativeLayout;
public ViewHolder(View itemView){
super(itemView);

text = itemView.findViewById(R.id.sText);
button = itemView.findViewById(R.id.addFriend);
text1 = itemView.findViewById(R.id.sText1);
text2 = itemView.findViewById(R.id.sText2);
relativeLayout = itemView.findViewById(R.id.relativeLayout);
    }
}

}

3.用户类:

代码语言:javascript
代码运行次数:0
复制
public class User {
public String  email, id, password;
public String username;

public User(String email, String username, String password){
this.email = email;
this.username = username;
this.password = password;
}
public User(){}
public void setUsername(String username){
this.username = username;
}
public String getUsername(){
return username;
}
public void setEmail(String email){
this.email = email;
}
public String getEmail(){
return email;
}
public String getPassword(){
return password;
}
public void setPassword(String password){
this.password = password;
}

}

EN

回答 3

Stack Overflow用户

发布于 2019-05-23 19:27:11

最初的数组列表,您的回收站视图设置为空。将数据添加到该列表时,必须通知回收者视图适配器。所以你的代码应该是这样的:

代码语言:javascript
代码运行次数:0
复制
searchAdapter = new SearchAdapter(arrayList, getApplicationContext());
  // remove this line
    /* recyclerView.setHasFixedSize(true);*/
    llm = new LinearLayoutManager(getApplicationContext());
    recyclerView.setLayoutManager(llm);
                recyclerView.setAdapter(searchAdapter);

    final DatabaseReference ref = FirebaseDatabase.getInstance().getReference().child("users");

    ref.addValueEventListener(new ValueEventListener() {
        @Override
        public void onDataChange(DataSnapshot dataSnapshot) {
            if (dataSnapshot.exists()) {
                for (DataSnapshot snapshot : dataSnapshot.getChildren()) {
                    String username = (String)
                            snapshot.child("username").getValue();
                    arrayList.add(username);

                }
                  ***searchAdapter.notifyDataSetChanged();***

            }
        }
票数 1
EN

Stack Overflow用户

发布于 2019-05-23 13:32:51

如果这是一次简单的聊天,那么列表视图对你来说可能更方便。

代码语言:javascript
代码运行次数:0
复制
databaseReference.addChildEventListener(new ChildEventListener() {
    @Override
    public void onChildAdded(DataSnapshot dataSnapshot, String s) {
       String value = dataSnapshot.getValue(String.class);
       list.add(value);
    }

    @Override
    public void onChildChanged(DataSnapshot dataSnapshot, String s) {

    }

    @Override
    public void onChildRemoved(DataSnapshot dataSnapshot) {

    }

    @Override
    public void onChildMoved(DataSnapshot dataSnapshot, String s) {

    }

    @Override
    public void onCancelled(DatabaseError databaseError) {

    }
});

这应该可以很容易地完成…的任务

票数 0
EN

Stack Overflow用户

发布于 2019-05-23 19:26:06

SearchAdapter.class中创建一个方法,如下所示

代码语言:javascript
代码运行次数:0
复制
 public void addData(ArrayList<String> list){
        this.mDataSet = list;
        notifyDataSetChanged();
    }

一旦您从Firebase数据库接收到数据,将其更新到适配器,如below.You,需要告诉回收器视图您的数据集已经更新。

代码语言:javascript
代码运行次数:0
复制
ref.addValueEventListener(new ValueEventListener() {
        @Override
        public void onDataChange(DataSnapshot dataSnapshot) {
            if (dataSnapshot.exists()) {
                for (DataSnapshot snapshot : dataSnapshot.getChildren()) {
                    String username = (String)
                            snapshot.child("username").getValue();
                    arrayList.add(username);                      
                }
                recyclerView.setLayoutManager(llm);
                recyclerView.setAdapter(searchAdapter);
                searchAdapter.addData(arrayList); // Add this line 
            }
        }

        @Override
        public void onCancelled(DatabaseError databaseError) {
        Toast.makeText(SearchActivity.this, "Database error", Toast.LENGTH_SHORT)
                .show();
        }
    });
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56276230

复制
相关文章
Linux下ssh远程主机报错:ssh_exchange_identification: read: Connection 解决
ssh_exchange_identification: read: Connection reset by peer
非著名运维
2022/06/22
14.4K0
Adb connection Error:远程主机强迫关闭了一个现有的连接
遇到这个问题呢,首先尝试拔掉数据线,然后重启adb,即点击DDMS视图中的reset adb,或者cmd中输入adb kill-server和adb start-server,最后连接数据线,发现大多数情况下并没什么卵用,然后试过多次之后发现,想砸电脑!啊哈哈~ 下面教大家一个终极解决办法:
Zachary46
2018/09/12
2.7K0
Adb connection Error:远程主机强迫关闭了一个现有的连接
python学习笔记(7)——远程主机强迫关闭了一个现有的连接
python socket.error: [Errno 10054] 远程主机强迫关闭了一个现有的连接。问题解决方案:
my_sunshine
2020/09/17
39.5K0
Python远程连接主机之paramiko模块
Python的paramiko模块能够连接远程主机,并在该主机上执行命令,和该主机之间进行文件传输。paramiko支持用明文密码登录远程主机和秘钥登录。使用之前要安装一下这个模块哈,pip install paramiko,不会安装可以百度哈。
用户1432189
2018/09/05
2.4K0
Python远程连接主机之paramiko模块
Unexpected EOF 远程主机强迫关闭了一个现有的连接 如何处理
尝试百度了不少方法,如time.sleep(1),response.close(),socket.setdefaulttimeout(20)。
dongfanger
2020/09/23
2.5K0
pycharm调试远程主机_eclipse连接远程服务器
1.首先下载pycharm专业版,路径自寻,这边就不细说了。(社区版不支持远程配置) 2.获取服务器的IP和密码 3.打开pycharm,点击菜单栏 :工具tools—>部署deployment–>configuration
全栈程序员站长
2022/09/28
3.7K0
pycharm调试远程主机_eclipse连接远程服务器
cos上传文件报错:ConnectionResetError: [WinError 10054] 远程主机强迫关闭了一个现有的连接。
python方法调用cos api向cos上传文件时,报错:ConnectionResetError: [WinError 10054] 远程主机强迫关闭了一个现有的连接。
用户8216114
2022/08/19
2.9K0
服务器远程连接/ssh方式连接教程(linux云主机远程登录)
Linux主机如何远程登录?建议使用ssh工具。使用Ssh连接登录的时候,需要先下载ssh登录客户端,下载安装完成之后可以进行Linux云主远程登录。
chenzhouliyan
2019/08/06
21.7K0
springboot整合redis一直报远程主机强迫关闭了一个现有的连接
需要修改一下2处,好像timeout 默认就是0,tcp-keepalive默认就是300,那为什么还回报错呢?可能是启动的时候没有指定配置文件
九转成圣
2024/05/08
4540
如何从命令行关闭或重启远程 Linux 主机?
在远程管理 Linux 主机时,有时需要通过命令行关闭或重启主机。本文将详细介绍如何使用命令行在远程 Linux 主机上执行关闭或重启操作,以确保安全和便捷地管理远程系统。
网络技术联盟站
2023/06/14
2.6K0
如何从命令行关闭或重启远程 Linux 主机?
ArcGIS Pro曲线OD图
最近看身边好多朋友都在发OD图的教程,这玩意也没难度啊,主要就是批量曲线化对一些朋友可能有点难度。
陈南GISer
2022/09/27
1.1K0
ArcGIS Pro曲线OD图
原来Python是这样连接远程主机的,你会吗?
在软件测试的过程中,涉及到远程Linux主机环境测试的时候,难免会遇到需要执行shell命令的场景,比如通过shell命令去配置一些环境或者去检查用例执行的结果等等,那么就是用到了比较常用的工具paramiko。
软测小生
2021/09/06
2.1K0
【问题解决】内网 VSCode 无法连接远程主机
这时候你认证看报错信息,它会尝试把你已经放置好的 vscode-server 删除掉,然后又删不掉,但是它默认已经删掉了,然后开始自己下载,但是又下载不了,于是就给你报错。
看、未来
2022/05/06
1.2K0
AMH云主机面板开启数据库远程连接
AMH默认是不支持远程连接数据库的,但是有时我们需要在其他地方使用我们的数据库,就需要开启远程连接,下面简单介绍下如何开启:
好派笔记
2021/09/16
9.1K1
SSH连接远程主机等待时间过长的解决方法
最近在使用SSH连接远程主机的时候发现在输入SSH命令之后要等很长很长时间才会出现输入密码的提示,而在别人机器上基本都是立即就可以显示输入密码的提示。令我非常不爽。谁叫咱是个急性子呢!所以也不想就这么等着,索性找找解决办法。终于,咱的机器也可以秒连远程主机啦!
星哥玩云
2022/07/03
1.4K0
腾讯云主机中MySQL无法远程连接的解决办法
崔庆才
2017/03/30
17K0
腾讯云主机中MySQL无法远程连接的解决办法
用secureCRT连接虚拟机中的Ubuntu系统,出现“远程主机拒绝连接”错误
因为我的Ubuntu中未安装ssh服务,终端下运行命令: sudo apt-get install openssh-server 之后重启一下sshd服务: sudo service sshd restart
周小董
2019/03/25
2.4K0
springboot 中spring-data-redis报错:远程主机强迫关闭了一个现有的连接,如何解决?
修改redis配置文件 redis.conf 中 tcp-keepalive 参数值
跟着飞哥学编程
2022/11/30
1K0
springboot 中spring-data-redis报错:远程主机强迫关闭了一个现有的连接,如何解决?
PyCharm远程连接Spark【本地虚拟机或云主机】
1、本地虚拟机版本是 CentOS6.9 | 连接的云主机是 Ubuntu18.04。【两个都连接成功了,方法步骤一样】
Lokinli
2023/03/09
2.3K0
PyCharm远程连接Spark【本地虚拟机或云主机】
Nagios 监控远程主机
上一篇文章介绍了 Nagios服务器的安装,本文继续介绍如何添加被监控的服务器,内容比较枯燥,都是安装过程,但希望能对准备使用Nagios的小伙伴有点帮助 远程监控原理 Nagios 与远程主机的
dys
2018/04/03
2.3K0
Nagios 监控远程主机

相似问题

ssh_exchange_identification:由远程主机关闭的连接

20

间歇“ssh_exchange_identification:由远程主机关闭的连接”错误

40

ssh_exchange_identification:由远程关闭的连接

10

散发连接错误ssh_exchange_identification:由远程主机关闭的连接

10

ssh_exchange_identification:由远程主机在vnx计算机上关闭的连接

10
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文