无法转换 java.util.Arraylist 类型的对象 从 Firebase 实时数据库嵌套对象读取

2024-03-25

此 Firebase 数据库结构:

在此输入图像描述 https://i.stack.imgur.com/sIjX8.png

这是我的设备类别:

public class Device {

private String title;
private Map<String,Counters> CounterNumber;
private Counters counters;

public void setCounter(Map<String,Counters> CounterNumber){
    this.CounterNumber=CounterNumber;
}
public Map<String,Counters> getCounter(){
    return CounterNumber;
}
public Counters getCounters(){
    return counters;
}
public void setCounters(Counters counters){
    this.counters=counters;
}
public Device(){

}
public Device(String title){
    this.title=title;
}

public String getTitle(){
    return title;
}
public void setTitle(String title){
    this.title=title;
}

}


Second class is my nested object I think  

二等计数器班我的问题是我不知道如何阅读Counter来自数据库的对象FirebaseUI and RecycleView.

public class Counters implements Serializable {
private String countername;
private String counternumber;
public Counters (){

}
public Counters(String counternumber,String countername){
    this.counternumber=counternumber;
    this.countername=countername;
}
public String getCounterName() {
    return countername;
}

public void setCounterName(String counterName) {
    this.countername = countername;
}

public String getCounterNumber() {
    return counternumber;
}

public void setCounterNumber(String counternumber) {
    this.counternumber = countername;
}

}

这是我的 HomeActivity 这里从 firebase 对象读取

    public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {

    View view = inflater.inflate(R.layout.fragment_home, container, false);

    recyclerView=(RecyclerView)view.findViewById(R.id.recycler_view);
    recyclerView.setLayoutManager(new LinearLayoutManager(getActivity()));
    firebaseDatabase=FirebaseDatabase.getInstance();
    databaseReference=firebaseDatabase.getReference();
    mDevice=new ArrayList<Device>();
    mdevices=new Device();

    databaseReference.addChildEventListener(new ChildEventListener() {
        @Override
        public void onChildAdded(@NonNull DataSnapshot dataSnapshot, @Nullable String s) {

        }

        @Override
        public void onChildChanged(@NonNull DataSnapshot dataSnapshot, @Nullable String s) {
            if (dataSnapshot != null && dataSnapshot.getValue() != null) {
                try {
                    for (DataSnapshot eventSnapshot : dataSnapshot.getChildren()) {
                        ArrayList<String> counterse= (ArrayList<String>) eventSnapshot.getValue();
                        Log.e(TAGE, counterse.toString());
                        Device device = eventSnapshot.getValue(Device.class);
                        String id = eventSnapshot.getKey();
                        Counters counters = eventSnapshot.child(id).getValue(Counters.class);
                        device.setCounters(counters);
                        mDevice.add(device);
                    }

                } catch (Exception ex) {
                    Log.e(TAG, ex.getMessage());
                }

            }
            displayDevices();
        }

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

        }

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

        }

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

        }
    });

    return view;
}
private void displayDevices(){
    options=
            new FirebaseRecyclerOptions.Builder<Device>()
                    .setQuery(databaseReference.child("devices").orderByChild("user_id").equalTo(userid),Device.class).build();


    adapter=
            new FirebaseRecyclerAdapter<Device, MyRecyclerViewHolder>(options) {
                @Override
                protected void onBindViewHolder(@NonNull MyRecyclerViewHolder holder, int position, @NonNull Device model) {

                    mdevices=mDevice.get(position);
                    holder.txt_title.setText(model.getTitle());
                    holder.txt_counter.setText(mdevices.getCounters().getCounterNumber());
                    Log.i(TAG,mdevices.getCounters().getCounterNumber());

                }

                @NonNull
                @Override
                public MyRecyclerViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
                    View itemView= LayoutInflater.from(getContext()).inflate(R.layout.device_list,parent,false);
                    return new MyRecyclerViewHolder(itemView);
                }
            };

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

}
@Override
public void onStart() {
   adapter.startListening();
    super.onStart();
}

@Override
public void onStop() {
    super.onStop();
    if(adapter != null) {
        adapter.stopListening();
    }
}

这是我的错误代码在此输入图像描述 https://i.stack.imgur.com/DKJfi.png


您收到以下错误:

无法将 java.util.ArrayList 类型的对象转换为 com.example.smartappfirebase.Counters 类型

因为你得到一个ArrayList对象和not a Counters对象,并且 Java 中没有办法创建这样的强制转换。你的counters中存在的节点cRVh ... NHeT节点实际上是一个数组。当您尝试在代码中读取该数组时,它会被读取为 ArrayList,因此会出现该错误。正如我在你的屏幕截图中看到的,该数组包含Counters对象。不幸的是,你不能简单地映射该数组Counters反对ArrayList<Counters>. The countersNode实际上是HashMap的ArrayList。所以如果你需要有一个ArrayList<Counters>,那么您应该自己迭代并创建该列表。除此之外,您的属性的名称Counters上课做not与数据库中的名称匹配。看,countername vs name and counternumber vs counter。所有属性必须匹配。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

无法转换 java.util.Arraylist 类型的对象 从 Firebase 实时数据库嵌套对象读取 的相关文章

随机推荐

  • 假设不变的 ASCII 编码,用 Rubyist 方法解码该编码字符串

    我的程序是二进制协议的解码器 该二进制协议中的字段之一是编码的String 中的每个角色String是可打印的 并且代表一个整数值 根据我正在解码的协议的规范 它表示的整数值取自下表 其中列出了所有可能的字符 Character Value
  • 依赖项的 Maven 项目变量

    我有一个加载小程序的 html 文件 html需要通过名称引用jar 并且由于maven根据artifactid 版本等对其进行命名 因此html需要随着项目的发展动态更新 似乎资源过滤是可行的方法 但我无法弄清楚要插入的变量应该是什么样子
  • jQuery 动画小数递增/递减

    我想一步一步地动画两个十进制数之间的差异 已经发现乔斯 克劳克罗夫特的解决方案 http www josscrowcroft com 2011 code jquery animate increment decrement numeric
  • 数据类中的属性

    描述 我正在尝试实现一个仅包含几个参数的简单数据类 dataclass class ReconstructionParameters img size int CR int denoise bool epochs int learning
  • 如何以可跨 Linux、Windows 和 MacOS 移植的方式收集 Python 3 中的当前架构?

    我正在尝试找到一种可移植的方式来收集当前的架构 例如x86 64 or AArch64 我将用它来填充一个标志 例如is x86 使用Python 3 它看起来像import platform platform machine 函数是正确的
  • 获取 CPU、RAM 和 GPU 信息 - UWP 应用

    是否可以在 UWP 应用程序中获取计算机的 CPU GPU 和 RAM 信息 E 在文本块中显示此信息 我想知道处理器型号 例如 Intel Core i7 xxxx 和总 RAM 我想知道处理器型号 例如 Intel Core i7 xx
  • 启发式参与者永无休止的定期恢复

    几天来我们的日志里一直充斥着这样的消息 2018 06 15 12 19 23 WARN com arjuna ats arjuna Periodic Recovery Transaction 0 ffff0a983f1e 1f3aa2ff
  • IE10 上的 WebSocket 出现 SecurityError

    我目前正在 IE10 在 Windows 8 上 下开发一个网站 使用 JavaScript 中的 WebSockets 它在 Firefox 18 和 Chrome 25 下运行良好 但在 IE10 上建立连接时出现 SecurityEr
  • 如何解决android中的OutOfMemoryError?

    我已经准备了可绘制动画的数量 当应用程序启动时 第一个动画将启动 我有两个按钮 下一个和上一个 具有相同的活动 当我单击下一个按钮时 我遇到了异常 例如 java lang OutOfMemoryError bitmap size exce
  • java中基于表单的身份验证的混乱

    谁能告诉我 我该如何处理j 安全检查java中基于表单的身份验证中的servlet 我是否必须映射 servlet 类j 安全检查web xml 文件中的名称 例如
  • 我如何在 Swift 中投射 @Binding

    很快我就可以用 Int doubleVariable 将 Int 转换为 Double 但是如何将 Binding 转换为 Binding 呢 然后我可以将 Binding var intVar Int 传递给需要 Double 绑定的函数
  • Python 正则表达式模块即使重叠 = True 也找不到所有匹配项

    我正在使用 PyPy正则表达式模块 https pypi org project regex 具有重叠匹配支持 我有以下代码 其中有一个字符串 A 我正在使用正则表达式查找在正则表达式中定义的 DNA 模式 我想找到与我的 RE 的所有匹配
  • RxJs 将流拆分为多个流

    如何根据分组方法将永无止境的流拆分为多个结束的流 a a a a a b b b b c c c c d d d e gt 到这些可观察到的 a a a a a b b b b c c c c d d d e gt 如您所见 a是在开始的时
  • 初始化 selenium webdriver 时如何修复 python-selenium 错误“连接被拒绝”?

    我正在非公共网页上运行非常复杂的 python selenium 测试 在大多数情况下 这些测试运行良好 但有时这些测试之一在 Webdriver 本身的初始化期间会失败 提示 当尝试初始化网络驱动程序时 即执行以下操作时 会发生此错误 S
  • 通过(sails js)水线将值推入mongodb数据库数组

    节点js 帆js 水线 插入后我需要将值更新 或推送 到以下架构中 我将 sailsjs 与 Waterline 和 mongodb 一起使用 countries states statename state districts distn
  • 在 ReleaseMutex 之前 CloseHandle 互斥锁 - 会发生什么?

    如果我在线程完成互斥体之前对互斥体调用 CloseHandle 因此尚未调用 ReleaseMutex 那么预期的行为是什么 CloseHandle 立即销毁传递给它的句柄 ReleaseMutex 然后会失败ERROR INVALID H
  • Kafka新生产者超时

    我正在使用新的 kafka 生产者客户端并将 timeout ms 属性设置为 50 毫秒 这是生产者中使用的完整配置 props put acks 1 props put buffer memory 33554432 props put
  • WCF中不使用CallBack将数据推送到客户端

    是否可以在 WCF 服务中将数据推送到客户端而不使用回调 设想 有 2 个客户端使用服务 客户端1发送消息 然后客户端2收到客户端1发送的消息 解决这个问题有几种方法 Use 发布 订阅框架 http msdn microsoft com
  • 使用 JCrop 裁剪绘制到画布中的图像

    我是 HTML5 新手 正在尝试使用 JCrop 裁剪图像 如果我想直接裁剪它是没有问题的 但是当它被绘制到画布中时 JCrop 不起作用 我认为原因可能是我正在创建一个图像变量 以便能够将其绘制到视口画布中并动态设置它的 Id 所以 Jq
  • 无法转换 java.util.Arraylist 类型的对象 从 Firebase 实时数据库嵌套对象读取

    此 Firebase 数据库结构 在此输入图像描述 https i stack imgur com sIjX8 png 这是我的设备类别 public class Device private String title private Ma