我正试图为我的Android应用程序制作启动画面,其中登录页面只是启动Splash活动,然后所有登录处理工作都在那里完成。然后,无论登录是否成功,它都会返回一个布尔值。但是,在加载XML布局内容之前,登录处理已完成。如何解决这个问题?
这是我的启动画面活动:
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Bundle extras = getIntent().getExtras();
if(extras !=null)
{
url = extras.getString("url");
}
setContentView(R.layout.splashscreen);
url += "login/?userName=" + Login.loginName + "&password=" + Login.password;
DomLoginParser parser = new DomLoginParser(url);
if(parser.parse())
{
Login.loginSuccessful = true;
}
else
{
Login.loginSuccessful = false;
}
finish();
}
答案 0 :(得分:3)
使用AsyncTask执行登录,将登录名移出onCreate调用。 你正在做的是在给它机会展示内容之前完成活动。 仅在onCreate调用完成后,该活动才显示contentView ...
答案 1 :(得分:0)
不知道DomLoginParser做了什么,并认为Login类是静态的,但为什么要在onCreate()中调用finish()方法?
这就是问题,你立即杀死了活动!
删除finish()调用。
如果
DomLoginParser parser = new DomLoginParser(url);
if(parser.parse())
{
Login.loginSuccessful = true;
}
else
{
Login.loginSuccessful = false;
}
这就是你所做的关于登录的所有事情,并希望将启动画面显示一段时间,调用Thread.sleep()(但要注意,如果睡眠时间太长,它可能会产生应用程序无响应),或者只需创建一个单独的进程(Asynctask或与另一个线程相关联的threadhandler,说明你的启动画面完成)。
答案 2 :(得分:0)
尝试这样的事情:
private class LoginChecker extends AsyncTask<Void, Void, Void> {
protected Void doInBackground(Void... args) {
DomLoginParser parser = new DomLoginParser(url);
if(parser.parse()) {
Login.loginSuccessful = true;
} else {
Login.loginSuccessful = false;
}
return null;
}
protected void onPostExecute(Long result) {
// finish the activity
}
}
要调用此方法,请将onCreate方法更新为以下内容:
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Bundle extras = getIntent().getExtras();
if(extras !=null) {
url = extras.getString("url");
}
setContentView(R.layout.splashscreen);
url += "login/?userName=" + Login.loginName + "&password=" + Login.password;
new LoginChecker.execute();
}