Codenameone 在android设备上而不是在模拟器上投射错误

Codenameone 在android设备上而不是在模拟器上投射错误,codenameone,Codenameone,我从android平板电脑的日志中看到以下错误。在android中将组件转换为容器有什么问题吗 正如我在评论中所写的,我不知道为什么会出现这种强制转换错误:因为日志中的类名是模糊的(Proguard默认用于Android),请尝试暂时禁用它以获得更可读的日志(我指的是构建提示Android.enableProguard=false) 我有很多在我的代号一代码铸造。通常,对于此类情况,我使用如下代码: Container myCnt = new Container();

我从android平板电脑的日志中看到以下错误。在android中将组件转换为容器有什么问题吗

正如我在评论中所写的,我不知道为什么会出现这种强制转换错误:因为日志中的类名是模糊的(Proguard默认用于Android),请尝试暂时禁用它以获得更可读的日志(我指的是构建提示
Android.enableProguard=false

我有很多在我的代号一代码铸造。通常,对于此类情况,我使用如下代码:

        Container myCnt = new Container();
        myCnt.add(new Label("Test"));
        myCnt.add(new Container());

        for (Component cmp : myCnt.getChildrenAsList(true)) {
            if (cmp instanceof Container) {
                Container myChildCnt = (Container) cmp;
                // do what I need with myChildCnt
            } else {
                Log.p("cmp is not a Container, it is: " + cmp, Log.WARNING);
            }
        }
代码唯一显著的区别是用于调查强制转换错误的日志。在这种情况下,日志为:

[EDT] 0:0:0,76 - cmp is not a Container, it is: Label[x=0 y=0 width=0 height=0 name=null, text = Test, gap = 2]

记得在模拟器中尝试Android和iPhone皮肤,看看是否有差异。

您的代码假设容器
c
的所有子容器的类型都是
Container
,但是您的cast异常表明此假设是错误的。但是,您的本机日志无法帮助理解您错误地强制转换了什么,因为类名被混淆了。也许您可以在禁用ProGuard的情况下进行新构建,以获得更重要的日志。此外,Android和iPhone上呈现的布局(如TextModeLayout)和组件(如InputComponents)也不同:您可以使用Android皮肤和iPhone皮肤进行测试,看看是否存在差异。添加构建提示Android.enableProguard=false后,我看不到任何详细的错误消息。消息和以前一样。感谢这里似乎有一个标签,答案似乎是正确的。如果它是一个无限进度容器,那么它可能就是一个标签。可能是别的,但这很难猜测。