仅使用onCreate执行doInBackground()时发生错误

时间:2017-01-02 02:33:14

标签: android android-asynctask

我的代码来自provides: [ MdDialogRef ]' MainActivity,所以当我按下后退按钮时,会有一个小动画。

onBackPressed中只有两行:

onBackPressed

这很好用。

现在在@Override public void onBackPressed() { dialog = new Dialog(MainActivity.this); new animationAsyncTask().execute(); } 的同一活动中,我尝试将其调用,因此我从onCreate删除了以上两行并在onBackPressed中调用了它们:

onCreate

然后有一个例外:

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    dialog = new Dialog(MainActivity.this);
    new animationAsyncTask().execute();
}

使用空指针。

我无法弄清楚的是,我没有改变任何内容,但它在error java.lang.RuntimeException: An error occured while executing doInBackground() 中运行良好,但在onBackPressed中运行良好。

onCreate

3 个答案:

答案 0 :(得分:0)

所以这是我的猜测。

你的动画表演是某种BLUR效果。因为android没有像iOS那样的功能。许多程序员试图模仿捕获屏幕截图的效果,然后将模糊效果应用于捕获的实际图像。

因此可能猜测您是在进行屏幕捕获的方式,还是在onCreate期间屏幕未显示以及onStart导致错误的事实。

如果你想证明它只是在调用它之前使用某种延迟"动画"查找CountDownTimer或使用FULLSCREEN模板在android studio中创建一个新项目,并检查它如何延迟执行代码隐藏UI并在项目中使用它。

祝你好运。

答案 1 :(得分:0)

我有个建议,

如果它被调用onBackPressed而不是onCreate它的变化很大,那是因为你的进程仍在加载..所以@Gatunox建议你需要等待并在活动准备就绪后执行!

你可以试试这个

使用AsyncTask并显示等待或等等。当它加载时显示你的动画。

AsyncTask onCreate

中拨打此new waitTillYouLoadData().execute();

希望它有所帮助!

 private class waitTillYouLoadData extends AsyncTask<String, Void, Boolean> {

        private ProgressDialog dialog = new ProgressDialog(MainActivity.this);

        protected void onPreExecute() {
            this.dialog.setMessage(getResources().getString(
                    R.string.plase_wait));
            this.dialog.show();
        }

        protected Boolean doInBackground(final String... args) {
            try {



                return true;
            } catch (Exception e) {
                Log.e("tag", "error", e);
                return false;
            }
        }

        @Override
        protected void onPostExecute(final Boolean success) {

            if (dialog.isShowing()) {
                dialog.dismiss();
            }

            if (success) {
               // ------- HERE YOU CAN CALL YOU ANIMATION -----//

            }
        }
    }

答案 2 :(得分:0)

你没有在AsyncTask发布你正在做的事情,但看起来你可能需要等到画出布局,使用ViewTreeObserver

protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        ViewTreeObserver vto = getWindow().getDecorView().getViewTreeObserver();
        vto.addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener()
        {
            @Override
            public void onGlobalLayout()
            {
                dialog = new Dialog(MainActivity.this);
                new animationAsyncTask().execute();
                getWindow().getDecorView().getViewTreeObserver().removeOnGlobalLayoutListener(this);
            }
        });

    }

如果您使用&lt;

,则需要一些额外的逻辑来删除。 API 16。