不远1210 2021-09-06 19:48 采纳率: 0%
浏览 47

android kotlin 协程中通过Handler发信息时提示类型检查时遇到递归问题

编译时会报错,信息是:Type checking has run into a recursive problem.Easiest workaround:specify types of your deslarations explicitly.

语言和环境(Andorid studio Kotlin)

本人状态(很久没碰android了,简单地看了下kotlin)

程序主要需求:
上网查询数据,返回结果,执行操作。

代码执行流程 :
1、MainActivity创建一个Handler,接收消息;
2、创建了一个访问网络的类ClassA,将MainActivity传入,其中的函数使用suspend申明,以通过协程挂起,使用IO线程访问网络;
3、MainActivity中通过协程调用ClassA的函数FuncA;
4、FuncA执行完毕后,通过Handler发送消息至MainActivity中的消息接受部分;
5、Handler中执行一部分代码后,再次调用ClassA中的另一个函数FuncB,FuncB执行完成后通过Handler发送消息,问题就出在这里!

简要代码如下:

//1、MainACTIVITY中----------------------------------
mScope.Lanuch{
      ClassA.FuncA();
}

//2、ClassA的FuncA中-----------------------------
MainActivity.mHandler.sendMessage(msg)

//3、MainActivity中Handler接受中------------------------
mScope.Lanuch{
        ClassA.FuncB();
}

//4、ClassA的FuncB中-------------------------------
MainActivity.mHandler.sendMessage(msg)//这里编译报错

错误表现:
一旦编译就会出现上述错误。
但有一点很神奇的是,一旦我注释掉sendMessage的代码,编译完成后;再取消注释,再执行就能成功编译运行(编译成功并达到了目标)。

核心需求:
其实最核心的功能需求就是协程执行完后,如何传递返回值;

我的问题:
1、目前的用法我感觉是有点别扭的,是应该用广播传值?还是其他方式?
2、这个错误到底指什么,如果说是代码检测到有无限递归的风险而停止编译,那我应该怎么pass掉这个递归的错误检查;

  • 写回答

3条回答 默认 最新

  • 有问必答小助手 2021-09-08 10:07
    关注

    你好,我是有问必答小助手,非常抱歉,本次您提出的有问必答问题,技术专家团超时未为您做出解答


    本次提问扣除的有问必答次数,将会以问答VIP体验卡(1次有问必答机会、商城购买实体图书享受95折优惠)的形式为您补发到账户。


    因为有问必答VIP体验卡有效期仅有1天,您在需要使用的时候【私信】联系我,我会为您补发。

    评论

报告相同问题?

问题事件

  • 创建了问题 9月6日

悬赏问题

  • ¥15 多电路系统共用电源的串扰问题
  • ¥15 slam rangenet++配置
  • ¥15 有没有研究水声通信方面的帮我改俩matlab代码
  • ¥15 对于相关问题的求解与代码
  • ¥15 ubuntu子系统密码忘记
  • ¥15 信号傅里叶变换在matlab上遇到的小问题请求帮助
  • ¥15 保护模式-系统加载-段寄存器
  • ¥15 电脑桌面设定一个区域禁止鼠标操作
  • ¥15 求NPF226060磁芯的详细资料
  • ¥15 使用R语言marginaleffects包进行边际效应图绘制