【发布时间】:2019-07-10 12:44:34
【问题描述】:
当我使用new saveWithStickers(BaseActivity.this).execute(); 调用AsyncTask 类以通知用户正在启动保存过程时,我试图显示Toast,当我运行onPreExecute() 方法下方的代码以获取一些逻辑reason 没有被调用,所以 Toast 也没有出现,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();
}
}
});
【问题讨论】:
-
你能把代码 sn-p 贴在你调用 Async 类的地方,并提到活动或服务等类类型吗?
-
@HariNJha 谢谢你的评论你能再看一遍帖子吗
-
它是否在片段中:尝试在 Toast.makeTet(getContext(), "text", Toast.LENGTH_SHORT).show() 中的 getContext();
标签: java android android-asynctask android-runonuithread