Codenameone Enum.valueof String在iOS 9上抛出IllegalArgument异常

时间:2016-03-10 09:48:13

标签: ios codenameone

在codenameone中,当在枚举上使用valueOf(String s)抛出IllegalArgument异常:在iPhone5,iOS9上没有枚举const,但在模拟器和Android上工作正常。它在3-4周前工作得很好。在文本框中键入OK,然后在模拟器上按下按钮,如果你构建并运行iOS9,你将获得例外。

用于测试的快照代码:

public class MyApplication {

private Form current;
private Resources theme;
enum popo { OK, ERROR,EXCEPTION};

public void init(Object context) {
    theme = UIManager.initFirstTheme("/theme");

    // Pro only feature, uncomment if you have a pro subscription
    // Log.bindCrashProtection(true);
}

public void start() {
    if(current != null){
        current.show();
        return;
    }

    Form hi = new Form("Hi World");
    hi.setLayout(new BorderLayout());
    final TextArea input = new TextArea();
    Button testr = new Button("Touch me");

    testr.addActionListener(new ActionListener() {

        public void actionPerformed(ActionEvent evt) {
            popo q = popo.valueOf(input.getText());
            Dialog.show("title", 
                    "just found string = "+input.getText()+" \nthat gives enum = "+q.toString()
                    , "OK", null);
        }
    });


    hi.addComponent(BorderLayout.CENTER, input);
    hi.addComponent(BorderLayout.SOUTH,testr);
    hi.show();

}

public void stop() {
    current = Display.getInstance().getCurrent();
}

public void destroy() {
}

}

非常感谢, 戈兰。

1 个答案:

答案 0 :(得分:0)

Enum的values()及相关电话未在Codename One中实施。问题的关键在于它们在混淆期间失败(对于Android)并且需要一些由javac工具生成的反射代码。

解决方法是使用以下内容:

enum popo {OK("OK"), ERROR("ERROR),EXCEPTION("EXCEPTION");
public popo(String value) {
   this.value = value;
}
String value;
};

然后使用myPopo.value