首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

无法将List<Obj> (从Single<List<Obj>>获取)从ViewModel移交给Activity。RecyclerView保持为空。原因在哪里?

问题的原因是可能出现了类型不匹配或数据传递错误的情况。

在Android开发中,将List<Obj>从ViewModel传递给Activity时,可能需要将Single<List<Obj>>解包为List<Obj>。可以通过使用RxJava的flatMap操作符来实现:

代码语言:txt
复制
viewModel.getListOfObj()
    .flatMap { singleList -> Single.just(singleList.blockingGet()) }
    .subscribe { listOfObj ->
        // 在这里使用listOfObj更新RecyclerView
    }

上述代码中,通过使用flatMap将Single<List<Obj>>转换为List<Obj>,然后使用subscribe在Activity中接收并使用listOfObj更新RecyclerView。

另外,还需要确保以下几点:

  1. 确认ViewModel中是否正确地获取到了Single<List<Obj>>数据。
  2. 确保Activity中的RecyclerView已正确初始化并设置了Adapter。
  3. 确认List<Obj>数据是否为空,可以通过在subscribe中打印日志或使用断点调试来进行验证。

对于RecyclerView保持为空的问题,可能有以下几个原因:

  1. 数据传递错误:确保List<Obj>数据成功传递到了Activity中,并且没有被修改或清空。
  2. Adapter未设置数据:在Activity中,确保RecyclerView的Adapter已正确设置数据源,即将获取到的List<Obj>传递给Adapter。
  3. 布局问题:检查RecyclerView的布局文件是否正确设置,包括布局宽高、方向等属性。

需要注意的是,以上答案中没有提及具体的腾讯云产品或链接地址,因为根据提供的问答内容,这些内容与云计算领域的专业知识、编程语言和开发过程中的BUG并无直接关联。如需了解腾讯云相关产品,请参考腾讯云官方文档或咨询腾讯云官方客服。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

MVVM架构之自动增删改的极简RecycleView的实现

1.实现view的动画:绝大部分动画都需要使用到view的引用,所以为了获取view的引用,开发者可以xml中view设置id,然后再viewDatabinding中获取该view的引用。...所以为了解决这个问题我引入了一个UiViewModel的概念:Activity中实现一个内部类,该监听器的内部实现所有的监听器,最后Activity中把UiViewModel引入到xml文件中。...2.ViewModel中到底需不需要传入Context,我认为是需要的,原因有一下两点: 1.很多情况下在ViewModel中直接使用Activity比兜转半天回到Activity中调用方法,直观许多逻辑也清晰许多...我们可以构造一个BaseActivity,然后所有的ViewModel中都只传入BaseAcvitity,而在ViewModel中95%的需要使用Activity的操作,都是不需要了解Activity的实际类型的...中获取ViewDatabinding并设置ViewModel和UiViewModel。

2K72

Android Jetpack架构组件(九)之Paging

为了方便开发者进行分页处理,Google开发者提供了分页组件(Paging),借助Paging组件开发者可以轻松的加载和呈现大型数据集,同时 RecyclerView 中进行快速、无限滚动。...[在这里插入图片描述] 如上图所示,主要的步骤如下: 使用DataSource服务器获取或者本地数据库获取数据。 数据保存到PageList中。...下面以WanAndroid的接口例,接口地址:https://www.wanandroid.com/article/list/1/json,数据源的代码如下。...而在MVVM中,我们需要构建ViewModel来实现是LiveData和UI层交互,而ViewModel的Flow的扩展函数可以直接PagingSource转换成一个LiveData可观察对象,代码如下...3.2.6 UI 中展示数据 最后,我们Activity中使用RecyclerView展示获取的数据即可,如下所示。

3.5K20
  • Android基于DataBinding封装RecyclerView实现快速列表开发

    3.3.3 创建 RecyclerView 数据和 item 布局都准备好了,下面就是页面的 activity_recycleview_simple.xml 布局里创建 RecyclerView 了,...layoutManger,实际开发中经常有小伙伴忘记设置这个属性导致列表不显示而排查半天原因浪费大量的时间 3.3.4 Activity 中使用 接下来就是 Activity 中使用了,即加载第...app:itemEventHandler="@{viewModel}"/> 通过 itemEventHandler ViewModel 传递到了 item 布局, item 布局里 item 的内部事件代理到...,不为空就调用 getItemLayout方法获取布局 id,则直接使用 layoutRes;获取到 item 布局的资源 id 后就可以通过 DataBindingUtil.inflate方法创建布局的...具体实现首先获取 RecyclerView 当前的 adapter,如果当前 adapter 则创建一个 DefaultBindingAdapter ,然后设置列表数据、item 点击事件、多 item

    2.8K30

    “终于懂了“系列:Jetpack AAC完整解析(五)DataBinding 重新认知!

    而user是否 DataBinding也会自动处理:表达式 @{user.name} 中,如果 user Null,则为 user.name 分配默认值 null。...所以,DataBinding 不负责 UI 逻辑,逻辑原本在哪里写,现在还是在哪里写,只不过,原本调用控件实例去刷新状态的方式,现在改成了数据驱动。这就是DataBinding 的核心目标。...super.onCreate(savedInstanceState); mViewDataBinding = DataBindingUtil.setContentView(this, R.layout.activity_list...能力 获取用户数据 private List getUserList() { List list = new ArrayList();...的初始化、调用ViewModel对数据的获取,这些处理及逻辑 和之前一毛一样,不同点在于 Item数据的展示: UserItemViewHolder中,不用去findViewById了,而是直接DataBindingUtil.bind

    1.4K10

    Mvvm、RxJava、Retrofit 三剑合璧

    数据驱动 MVVM中,以前开发模式中必须先处理业务数据,然后根据的数据变化,去获取UI的引用然后更新UI,通过也是通过UI来获取用户输入,而在MVVM中,数据和业务逻辑处于一个独立的ViewModel...(TextView 换成 EditText)ViewModel 几乎不需要更改任何代码,专注自己的数据处理就可以了,如果是MVP遇到UI更改,就可能需要改变获取UI的方式,改变更新UI的接口,改变UI...比如我们xml中申明了一个ViewModel,name叫friendListViewModel,就会自动BR类中编译出一个id,叫BR.friendViewModel,Activitynew CommonAdapter...它也是一个ViewModel,但是它是RecyclerView每一个item的ViewModel,item加载时也和普通布局一样,也是通过绑定一个ViewModel来加载数据的,看到这就明白了吧,这就是...:img="http://schemas.android.com/apk/res-auto" > 这个命名空间img就是注解里定义的img,必须保持统一。

    2.6K20

    Android面试题到处攒,一到面试就不知深浅忘个干净?快来看看这份超详细整理!

    Controller --> View, 也就是Activity获取数据之后,更新内容反映到View上。 这样一个完整的项目架构就出来了,也是我们早期进行开发比较常用的项目架构。...然后最后演化成,View层写成接口的形式,然后Activity去实现View接口,最后Presenter类中去实现方法。 Model:数据模型,比如我们数据库或者网络获取数据。...Controller --> View, Presenter获取数据之后,更新内容反馈给Activity,进行view更新。...其次,由于ViewModel在生命周期内会保持局部单例,所以可以更方便Activity的多个Fragment之间通信,因为他们能获取到同一个ViewModel实例,也就是数据状态可以共享了。...就让ViewModel的生命周期保持Activity一样了。这也是很多三方库用到的巧妙方法,比如Glide,也是建立的Fragment来管理。

    1.5K20

    6. Jetpack---Paging你知道怎样上拉加载吗?

    它继承自AbstractList,支持所有List的操作,它的内部有五个主要变量: mMainThreadExecutor 主线程Executor,用于结果传递到主线程 mBackgroundThreadExecutor...那么我们的数据源哪里获取呢,可以看到Listing的第一个参数pageList = livePageList,livePageList通过LivePagedListBuilder创建,LivePagedListBuilder...method=download&shareKey=460a039c8e8695464d321519258a104b)] 总结一下,Paging的基本原理: 使用DataSource网络或者数据库获取数据...数据保存到PageList中 PageList中的数据提交给PageListAdapter PageListAdapter在后台线程中通过Diff对比新老数据,反馈到RecycleView中 RecycleView...刷新数据 基本原理图上我们可以很清晰的了解到了,本篇文章的Demo中结合了ViewModel以及DataBinding进行了数据的存储和绑定。

    1.8K40

    Andorid-JetPack-ViewModel组件

    复用实现原理 准确点来说,应该是ViewModel如何做到宿主销毁了,还能继续存在.以至于页面恢复重建后,还能接着复用 肯定是前后获取到的是同一个ViewModel实例对象 我们先来看下获取ViewModel...作为Key, 这就是ViewModelStore中存储的Key,Value是我们的ViewModel的.class对象 我们知道了ViewModelViewModelStore中获取的,那既然想做到...ViewModel实例的复用,那就是说ViewModelStore也要复用,关键点就在这里 3.3ViewModelStore是在哪里获取的?...中把viewModelStore提出来变成成员变量 3.如果mViewModelStore,则就创建一个 那这个只是ViewModelStore的获取,那我们想知道ViewModelStore是什么地方存的呢...viewModelStore = nc.viewModelStore; } } //如果viewModelStore 则就直接

    1.8K30

    ViewPager中Fragment状态保存的哪些事

    引言 使用 ViewPager 时 , 如果我们的适配器使用的是 FragmentStatePagerAdapter ,那么当我们重新滑到之前已销毁的页面时,一般情况下页面的状态依然保持不变(比如...Fragment 内部是一个 RecyclerView,其数据源来自 activity级 的ViewModel(即我们对数据根据key做了缓存,避免每次的重新初始化) 我们做一个滚动测试,然后再看看 Fragment...其内部有一个名为 mSavedState 的List,用于保存我们的 Fragment状态 ,那这个 mSavedState 又会在哪里被调用呢?...初始化 Fragment 时,其会通过 下标position mSavedState 找到缓存的 Fragment 状态,然后将设置给其,便于后续的使用。...return fragment; } 小结 所以我们可以简单理解 FragmentStatePagerAdapter 之所以可以做到状态还原,是因为其销毁 Fragment 时,默认缓存了当前 Fragment

    1.3K20

    第14章 使用Kotlin 进行 Android 开发(2)

    14.2.3 实现后端 API 的接入 本节中我们实现后端 API 的接入及其数据展示的逻辑。...、activity_movie_detail.xml 、 movie_detail.xml、movie_list.xml、movie_list_content.xml ,它们的代码分别介绍如下。...View 要显示的数据Adapter里面获取并展现出来。Adapter负责把真实的数据是配成一个个View,也就是说View要显示什么数据取决于Adapter里面的数据。...我们定义了一个 MovieContent 对象类来存储 API 获取到的数据,代码如下 package com.easy.kotlin.bean import android.os.StrictMode...为了演示效果,我们访问网络的代码前,把 ThreadPolicy 设置允许运行访问网络 val policy = StrictMode.ThreadPolicy.Builder().permitAll

    1.1K20

    内存泄露分析工具:LeakCanary 原理分析

    这些崩溃点 一般都是压倒骆驼的最后一根稻草,并非崩溃的根本原因,需要dump内存或者句柄的打开情况,才能比较直观的修复问题 二、检测内存泄漏的方案 1.字节Liko OOM 和内存触顶时通过用户无感知...检测时机 ViewModel 的检测比较巧妙,Leakcanary Fragment onCreate 时当前的 Fragment 添加一个 ViewModel,而这个 ViewModel 利用跟随宿主生命周期的原理...) { // Fragment 执行 onCreate 时当前 Fragment 添加一个 ViewModel ViewModelClearedWatcher.install...类似于 Activity,也是 onDestroy 时 Service 对象加入到 watchedObjects 里面,但是由于 Service 没有开放声明周期的回调,所以也是通过 hook 的放获取...= null) } 清理完成后,Leakcanary Activity 对象封装成一个弱引用,并关联一个 UUID 生成的 key 和一个回收队列。

    4K40

    Android SurfaceVeiw划矩形截屏存放到RecyclerView

    前一篇文章《Android SurfaceView onTouchEvent进阶操作OpenCV显示》我们已经实现了SurfaceView中划矩形显示源图上,本章我们结合前几天学习的东西把划的图形保存到...01 布局文件 activity_main.xml ? 布局文件中我们改为帧布局FrameLayout,然后加入一个RecyclerView,并放到了最底部。...MainActivity中定义与RecyclerView相关的参数,然后写了一个初始化的RecyclerView的方法。...nv21ToBitmap的方法中我们重新写了一个调用的JNI,返回的List集合,其中第一张我们的原图,第二张是我们截取出来的图,然后把第二张图回调函数中加入发送过去。..., "", "()V"); //创建一个ArrayList对象 jobject list_obj = env->NewObject(list_jcls, list_init,

    1.2K30

    MVVM、RxJava、Retrofit三剑合璧,事半功倍

    View:视图,对应Activity和xml文件,纯粹的ui展示层,不涉及任何的业务流程;Model:数据模型,我们就可以理解成数据提供方;ViewModel:最重要的一层结构,名字就可以看出,它是连接...如果是MVP遇到ui更改,就可能需要改变获取控件的方式,改变更新ui的接口,改变ui上获取输入的代码,可能还需要更改访问控件对象的属性代码等等,会非常麻烦。...:主要演示多类型RecyclerView列表Adapter的写法 (4)粉丝列表:网络获取数据,主要演示RxJava+Retrofit的基本使用方法 构建 废话讲了这么多,下面开始正式搭建MVVM应用...因为我们有可能在ViewModel中需要调用Activity的方法,比如跳转页面,所以需要有一个入口获取Activity实例。 再看成员变量。...Xml中使用时,我们首先要申明命名空间 ? 这个命名空间Img就是注解里定义的Img,必须保持统一。否则报错。 然后就用这个命名空间给控件赋值。 ?

    2.5K40

    为什么各大厂自研的内存泄漏检测框架都要参考 LeakCanary?因为它是真强啊!

    因为当内存泄漏堆积而内存不足时,应用可能从任何一次无关紧要的内存分配中抛出 OOM,堆栈日志只能体现最后一次内存分配的堆栈信息,而无法体现出导致发生 OOM 的主要原因。...标记: 标记泄漏原因后,节点 LEAKING 状态,分析报告中会显示 Leaking: YES (leakingReasons) ; 缺省: 节点 UNKNOWN 状态,分析报告中会显示 Leaking...Activity#onDestroy 事件,当前 Activity 对象交给 ObjectWatcher 监控; ActivityWatcher.kt private val lifecycleCallbacks...即: Activity#onCreate 和 Fragment#onCreate 事件中实例化一个自定义ViewModel进入 ViewModel#onClear() 方法时,通过反射获取当前作用域中所有的...ViewModel 对象交给 ObjectWatcher 监控。

    1.1K10

    JetPack--Paging2

    以前大家都使用过的一种方式是定义一个page,当达到加载更多条件时,page加一再去请求数据,为此我们要写很多重复的代码,Paging就对分页进行了一个封装 Paging由分为三个模块 1.DataSource:数据该模块中获取...,数据可以来源于网络、本地数据库等 2.PagedList:负责具体获取数据的逻辑,何时获取、加载下一页、预加载等 3.PagedListAdapter:RecyclerView的adapter需要继承它...,内部做了一系列处理 一、Paging上手 1.PositionalDataSource PositionalDataSource适合于任意位置获取数据的情况,入参开始点和数据量大小 首先我们要获取网络数据...中配置RecyclerView并实例化ViewModel进行数据观测: package com.aruba.paging; import androidx.annotation.NonNull; import...(this, RecyclerView.VERTICAL, false)); //实例化ViewModel MovieViewModel movieViewModel

    1.4K30

    kotlin--综合运用Hilt、Paging3、Flow、Room、Retrofit、Coil等实现MVVM架构

    class APP : Application() 别忘了Manifest中配置 2.Activity中开始查找注入对象 使用AndroidEntryPoint注解来表示,Hilt开始查找注入对象...添加扩展函数 为了后续Paging的使用,RecyclerView添加设置Adapter和liveData的扩展函数: fun <VH : RecyclerView.ViewHolder, T : Any...Append,此时数据库中有数据了,直接返回Success通知Pager可以数据库取数据了 { try { //1.判断loadType...等一系列初始化配置的值 如果上一页最后一个item,那么表示列表加载到底了,否则获取到需要加载的当前page { //加载更多 LoadType.APPEND...= it.refresh is LoadState.Loading } } 十、App Starup实现无网络数据组件初始化 RemoteMediator中可以无网络时数据库获取数据

    3.5K31
    领券