为什么我的应用程序无法在iOS上启动,而只显示加载屏幕?

时间:2019-02-19 16:03:30

标签: ios codenameone loading

我已经用Codename One开发了一个应用程序。在模拟器中,该应用程序可同时在iPhone和Android手机上使用。现在,我在手机上安装了该应用程序。它可以在不同的Android手机上完美运行。然后我将其安装在iPhone上。我可以安装它,但是随后我尝试启动该应用程序,并出现一个加载屏幕,它正在加载,什么都没有发生。

我并没有改变init(Object)方法。我刚刚添加 if (Display.getInstance().canForceOrientation()) { Display.getInstance().lockOrientation(true); }

start()方法中,我为OAuth2登录创建了Login类的对象,然后将必要的数据(Oauth2 URL,重定向URI,客户端ID,客户端密钥)添加到该对象。然后,我调用doLogin()方法。我将代码包装在try / catch()中,但它没有任何改变。

try {
            Login login = new Login() {
                @Override
                public boolean isNativeLoginSupported() {
                    return false;
                }

                @Override
                protected boolean validateToken(String token) {
                    return false;
                }
            };
            login.setOauth2URL(URL_LOGIN);
            login.setRedirectURI(URL_REDIRECT);
            login.setClientId(CLIENTID);
            login.setClientSecret(CLIENT_SECRET);
            login.setCallback(new LoginCallback() {
                @Override
                public void loginSuccessful() {
                    WelcomeForm.getInstance().show();
                }

                @Override
                public void loginFailed(String errorMessage) {
                }
            });
            login.doLogin();
        } catch (Throwable t) {
            Log.e(t);
            Form error = new Form("Errror", new BorderLayout());
            TextArea txt = new TextArea(t.toString());
            error.add(CENTER, txt);
            error.show();
        }

1 个答案:

答案 0 :(得分:0)

尝试对您的代码进行此更改,它可能会触发过程中的某个位置的调用和阻塞,这应该可以解决:

Form loading = new Form("Login");
Button login = new Button("Login");
login.addActionListener(e ->
    try {
        Login login = new Login() {
            @Override
            public boolean isNativeLoginSupported() {
                return false;
            }

            @Override
            protected boolean validateToken(String token) {
                return false;
            }
        };
        login.setOauth2URL(URL_LOGIN);
        login.setRedirectURI(URL_REDIRECT);
        login.setClientId(CLIENTID);
        login.setClientSecret(CLIENT_SECRET);
        login.setCallback(new LoginCallback() {
            @Override
            public void loginSuccessful() {
                WelcomeForm.getInstance().show();
            }

            @Override
            public void loginFailed(String errorMessage) {
            }
        });
        login.doLogin();
    } catch (Throwable t) {
        Log.e(t);
        Form error = new Form("Errror", new BorderLayout());
        TextArea txt = new TextArea(t.toString());
        error.add(CENTER, txt);
        error.show();
    }});
loading.show();

下面的原始答案:

没有固有的限制可以阻止iOS上的OAuth。我猜您正在收到一个异常,该异常会触发错误Dialog并导致此失败。我建议使用try / catch()包装该区域,并将错误记录为FormLog,例如:

try {
   // your OAuth code
} catch(Throwable t) {
   Log.e(t);
   Form error = new Form("Errror", new BorderLayout());
   TextArea txt = new TextArea(t.toString());
   error.add(CENTER, txt);
   error.show();
}

一旦您知道异常和错误消息,就可以尝试进一步缩小问题范围。如果您有权访问日志,我们还可以查看堆栈跟踪,例如通过Log.sendLogAsync()