1

我有一个启动屏幕的活动,它在布局中只有一个图像。我想在 UI 线程中显示初始屏幕时在后台进行一些 Http 调用。但是当我执行 AsyncTask 时,布局中的图像不会显示。我只得到一个空白屏幕,让我相信布局本身没有加载。下面是活动代码。

protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_splash_screen);
        String authReqResponse;
        Toast errorDisplayToast = new Toast(this);

        AuthorizationRequest authReq = new AuthorizationRequest();
        authReq.execute(new Void[] {});

        try {
            authReqResponse = authReq.get();
            if(authReqResponse.equalsIgnoreCase(GeneralConstants.AUTH_FAILED_ERROR)) {
                errorDisplayToast.makeText(SplashScreen.this, R.string.request_auth_failed_error_message, Toast.LENGTH_LONG);
                errorDisplayToast.show();
            } else if(authReqResponse.equalsIgnoreCase(null)) {
                errorDisplayToast.makeText(SplashScreen.this, R.string.networkErrorMessage, Toast.LENGTH_LONG);
                errorDisplayToast.show();
            } else {
                GeneralConstants.REQ_TOKEN = authReqResponse;
                Intent startARIntent = new Intent(SplashScreen.this, MainActivity.class);
                startActivity(startARIntent);
                finish();
            }
        } catch(Exception e) {
            e.printStackTrace();
        }
}
4

2 回答 2

1

这里

try {
       authReqResponse = authReq.get();///<<get method of AsyncTask

           //your code....

作为关于AsyncTask 的文档。获取(长时间超时,TimeUnit 单位):

如有必要,最多等待给定时间以完成计算,然后检索其结果。

意味着如果您使用此方法从 AsyncTask 将结果返回到您的 UI 主线程,那么它将停止您的主 UI 执行,直到结果未从 AsyncTask 的 doInBackground 方法返回

解决方案onPostExecute用于在 AsyncTask 执行完成时更新 UI 元素

于 2012-12-22T04:17:23.063 回答
0

这是与 AsyncTask 交互的一种非常奇怪的方式。您确实意识到这execute()是非阻塞的,对吗?该try块将在execute. 此外,authReq一旦您的任务完成执行, 将是未定义的。您需要使用Activity实例上的侦听器重写该位。

其次,您可以 just authReq.execute(),这将使其无效。

最后,要调试您的启动画面,请将其简化为:

protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_splash_screen);
}

并确认它有效。然后继续修复您AsyncTask的通知 Activity onPostExecute 授权请求的结果。

于 2012-12-22T04:17:25.160 回答