android - 修复下载完成后出现的 ProgressDialog

标签 android

我有一个用文章填充的 ListView。当用户长按一篇文章时,我想下载它的摘要并显示给用户。我在 AsyncTask(不是 doInBackground...)中有一个函数负责下载。在下载过程中,我想显示一个ProgressDialog。由于下载是在主线程上进行的,所以当我长按一篇文章时会出现延迟,并且 ProgressDialog 在下载完成后显示。如何让它在下载过程中显示?

我已经尝试过这些方法,但由于我是 Android 开发的初学者,所以我不太了解它们。该应用程序在下载时卡住并在完成后显示对话框。

ProgressDialog shows up after thread is done display progressdialog while listview is loading

主页 Activity

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

    StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build();
    StrictMode.setThreadPolicy(policy);


    trendingList.setOnItemLongClickListener(new AdapterView.OnItemLongClickListener() {
        @Override
        public boolean onItemLongClick(AdapterView<?> parent, View view, int position, long id) {

            try {
            ...
            } catch (Exception e) {

                String link = homeLinks.get(position);
            //TASK TO DOWNLOAD SUMMARIES FROM ASYNCTASK
                task.downloadSummary(link);
                adapter.notifyDataSetChanged();

            }
            return true;
        }
    });

背景类

public class  BackgroundTask extends AsyncTask<String, Void, String> {

ProgressDialog progress = new ProgressDialog(HomeActivity.this);

 //SHOW DIALOG AND THEN DOWNLOAD SUMMARIES
    public void downloadSummary(String address){

        progress.setMessage("Downloaded summary ");
        progress.show();
        ...

最佳答案

在初始化 AsyncTask 时,您必须分配该线程的 3 个相关方法,onPreExecute 将分配您的 ProgressDialog,InBackground 用于放置您要执行的作业,onPostExecute 用于重新生成您的工作结果并关闭您的 progressDialog

一直这样

public class  BackgroundTask extends AsyncTask<String, Void, String> {

ProgressDialog progress = new ProgressDialog(HomeActivity.this);


    @Override
    protected void onPreExecute() {
    super.onPreExecute();
    progress.setMessage("Downloaded summary ");
    progress.show();
    }

    @Override
        protected void doInBackground(String... strings) {
    //Ação do Trabalho
    }

    @Override
        protected void onPostExecute(String result) {
        progress.dismiss();
        Log.e("Work", "Result "+result);
    }
}

这是强制性的,谷歌后台方法不喜欢忽略此用途,因为 AsysnTask 将不得不使用它。相反,如果它是一项快速的工作,则使用通过运行调用的线程

关于android - 修复下载完成后出现的 ProgressDialog,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54312984/

相关文章:

安卓 NFC : SNEP protocol and P2P response

android - 在 Jetpack Compose 中,如何应用存储在 Assets 中的字体/字体?

java - Google App Engine 和 Python 连接项目

android - 在 Android 上使用 Verizon Motorola Droid 以编程方式将 SMS 发送到电子邮件

android - "An error' s 发生 "when authenticating with Facebook' s android sdk

android - Volley 字符串请求的意外响应代码 503(使用 Amazon Web Service)

android - Snackbar 操作文本颜色不变

android - 在 Android 中,在 WorkManager 的 Worker 类中运行异步任务

android - 创建上下文失败 0x3005

android - 我的 Android ADT 项目资源管理器窗口消失了