Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/94.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为什么我的应用程序没有在iOS上启动,只是显示一个加载屏幕?_Ios_Codenameone_Loading - Fatal编程技术网

为什么我的应用程序没有在iOS上启动,只是显示一个加载屏幕?

为什么我的应用程序没有在iOS上启动,只是显示一个加载屏幕?,ios,codenameone,loading,Ios,Codenameone,Loading,我开发了一个代号为One的应用程序。在模拟器中,该应用程序可以在iPhone和Android手机上运行。现在我在手机上安装了这个应用程序。它在不同的安卓手机上工作得非常好。然后我把它安装在iPhone上。我可以安装它,但当我尝试启动应用程序时,会出现一个加载屏幕,它正在加载,其他什么都没有发生 我没有太多地更改init(Object)方法。我刚才补充说 if(Display.getInstance().canForceOrientation()){ Display.getInstance().l

我开发了一个代号为One的应用程序。在模拟器中,该应用程序可以在iPhone和Android手机上运行。现在我在手机上安装了这个应用程序。它在不同的安卓手机上工作得非常好。然后我把它安装在iPhone上。我可以安装它,但当我尝试启动应用程序时,会出现一个加载屏幕,它正在加载,其他什么都没有发生

我没有太多地更改
init(Object)
方法。我刚才补充说
if(Display.getInstance().canForceOrientation()){
Display.getInstance().lockOrientation(true);
}

start()
方法中,我为OAuth2登录创建登录类的对象,然后向该对象添加必要的数据(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();
        }

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

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的固有限制。我猜您会遇到一个异常,它会触发一个错误
对话框
,并导致此故障。我建议用try/catch()包装该区域,并将错误记录为
表单
日志
,例如:

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()

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

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的固有限制。我猜您会遇到一个异常,它会触发一个错误
对话框
,并导致此故障。我建议用try/catch()包装该区域,并将错误记录为
表单
日志
,例如:

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()

出现问题,我想,到目前为止您是如何调试应用程序的?你看到了什么?你在
init(Object)
start()
方法中做了什么?是否在其中一个对话框中显示
对话框
?如果是这样的话,那将是一个巨大的挑战problem@holex我还没有调试应用程序,今天我将调试它,因为我没有Mac@ShaiAlmog我没有在其中一个方法中显示对话框。我猜您的oauth代码在iOS上触发了一个异常。我建议注释掉代码,直到你能缩小异常的来源。我想,出了点问题,到目前为止你是如何调试你的应用程序的?你看到了什么?你在
init(Object)
start()
方法中做了什么?是否在其中一个对话框中显示
对话框
?如果是这样的话,那将是一个巨大的挑战problem@holex我还没有调试应用程序,今天我将调试它,因为我没有Mac@ShaiAlmog我没有在其中一个方法中显示对话框。我猜您的oauth代码在iOS上触发了一个异常。我建议注释掉代码,直到可以缩小异常源的范围为止。我用try/catch()包装了代码,但没有发生其他事情。它没有引发异常。很抱歉,除了带有加载符号的表单有一个标题(加载)之外,发生了同样的事情。我再次查看了代码,我看到
Login
类调用了
Oauth2
类,其中显示了一个
对话框。这在启动时是有问题的,甚至可能无法在
callSerially
中工作。尝试新建议的解决方法。按钮激活后,UI将完全初始化,对话框应能正常工作。如果这样做有效,我们将尝试想出一个更好的解决方法。带有按钮的表单会出现,但单击按钮后,加载屏幕会出现,它只是加载,没有其他任何事情发生。我猜这是失败的,因为组件中的错误决定将浏览器组件放在
对话框中。这段代码在我们的测试中从未达到,因为在iOS OAuth上,它通常会转到您显式禁用的本机登录。我想我们需要解决这个问题。您可以归档一个问题,并根据使用表单而不是对话框的代码创建自己的OAuth逻辑。它实际上应该比当前代码简单得多,当前代码是为旧版本的Codename One设计的。它没有引发异常。很抱歉,除了带有加载符号的表单有一个标题(加载)之外,发生了同样的事情。我再次查看了代码,我看到
Login
类调用了
Oauth2
类,其中显示了一个
对话框。这在启动时是有问题的,甚至可能无法在
callSerially
中工作。尝试新建议的解决方法。按钮激活后,UI将完全初始化,对话框应能正常工作。如果这样做有效,我们将尝试想出一个更好的解决方法。带有按钮的表单会出现,但单击按钮后,加载屏幕会出现,它只是加载,没有其他任何事情发生。我猜这是失败的,因为组件中的错误决定将浏览器组件放在
对话框中。这段代码在我们的测试中从未达到,因为在iOS OAuth上,它通常会转到您显式禁用的本机登录。我想我们需要解决这个问题。您可以归档一个问题,并根据使用表单而不是对话框的代码创建自己的OAuth逻辑。它实际上应该比当前的代码简单得多,当前的代码是为旧版本的Codename One设计的。