Метод onPreExexute не вызывается - PullRequest
0 голосов
/ 10 июля 2019

Я пытаюсь отобразить Toast, когда я вызываю класс AsyncTask с new saveWithStickers(BaseActivity.this).execute();, чтобы уведомить пользователя о том, что процесс сохранения запускается, когда я запускаю код ниже метода onPreExecute() для некоторого логического причина не называется, поэтому тост также не появляется, является ли runOnUiThread причиной такого поведения?

@SuppressLint("StaticFieldLeak")
public class saveWithStickers extends AsyncTask<Void, File, File> {
    File fileSaved;
    Context mContext;

    saveWithStickers(Context context) {
        mContext = context;
    }

    @Override
    protected File doInBackground(Void... voids) {
        fileSaved = FileUtil.getNewFile(BaseActivity.this, "VAPOGRAM");
        if (fileSaved != null)
            runOnUiThread(() -> {
                stickerView.save(fileSaved, true);
            });
        return fileSaved;
    }

    @SuppressLint("SetTextI18n")
    @Override
    protected void onPreExecute() {
        super.onPreExecute();
        content.setVisibility(View.GONE);
        Toast.makeText(mContext, "saving ...", Toast.LENGTH_SHORT).show();
    }

    @Override
    protected void onPostExecute(File file) {
        super.onPostExecute(file);
}


saveButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                CheckPermissionUtil checkPermissionUtil = new CheckPermissionUtil(BaseActivity.this);
                if (Build.VERSION.SDK_INT >= 23) {
                    if (checkPermissionUtil.checkPermission(1812)) {
                        new saveWithStickers(BaseActivity.this).execute();
                    } else
                        checkPermissionUtil.requestPermission(1812);
                } else {
                    new saveWithStickers(BaseActivity.this).execute();
                }
            }
        });

1 Ответ

1 голос
/ 10 июля 2019

Замените ваш код этим

@SuppressLint("StaticFieldLeak")
        public class saveWithStickers extends AsyncTask<Void, File, File> {
            File fileSaved;
            Context mContext;

            saveWithStickers(Context context) {
                mContext = context;
            }

            @Override
            protected File doInBackground(Void... voids) {
                fileSaved = FileUtil.getNewFile(BaseActivity.this, "PHOTO EDITOR");
                if (fileSaved != null)
                    runOnUiThread(() -> stickerView.save(fileSaved, true));
                return fileSaved;
            }

            @SuppressLint("SetTextI18n")
            @Override
            protected void onPreExecute() {
                super.onPreExecute();
                Toast.makeText(mContext, "Saving ...", Toast.LENGTH_SHORT).show();
            }

            @Override
            protected void onPostExecute(File file) {
                super.onPostExecute(file);

        }
    }

Чтобы получить доступ к контексту, вам нужно передать его или использовать WeakRerefence для родительского действия

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...