我已经用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();
}
答案 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()包装该区域,并将错误记录为Form
或Log
,例如:
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()
。