1

我正在尝试为我的 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();
}
4

3 回答 3

3

通过使用 AsyncTask 执行登录,将登录移出 onCreate 调用。您正在做的是在给它机会展示内容之前完成活动。只有在 onCreate 调用完成后,活动才会显示 contentView ...

于 2012-05-24T14:19:08.713 回答
0

不知道 DomLoginParser 是做什么的,认为 Login 类是静态的,但是为什么要在 onCreate() 中调用 finish() 方法呢?

这就是问题所在,您立即终止活动!

删除 finish() 调用。

如果

DomLoginParser parser = new DomLoginParser(url);
if(parser.parse())
{
    Login.loginSuccessful = true;
}
else
{
    Login.loginSuccessful = false;
}

这就是您对登录所做的所有事情,并且希望启动画面在一段时间内可见,调用 Thread.sleep() (但请注意,如果睡眠时间过长,它会产生 Application Not Responding),或者只是创建一个单独的进程(与另一个线程相关联的异步任务或线程处理程序,告诉您的启动屏幕完成)。

于 2012-05-24T14:26:44.973 回答
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();
}       
于 2012-05-24T14:44:26.180 回答