ProgressDialog 未显示在活动中

Posted

技术标签:

【中文标题】ProgressDialog 未显示在活动中【英文标题】:ProgressDialog not show in activity 【发布时间】:2015-12-14 10:55:56 【问题描述】:

我正在编写一个 android 应用程序。在我的一项活动中,我调用了方法updateAPI(),它将数据从数据库更新到服务器。

这是我的方法的代码:

    private void updateAPI()
    boolean stop = false;
    progressDialog = new ProgressDialog(this);
    progressDialog.setMessage("Updating...");
    progressDialog.show();
    progressDialog.setCancelable(false);
    ApplicationInfo applicationInfo = null;
    while(!stop)
        List<ApplicationKeyId> list = MyApplication.getApplicationId_updated(false);
        if (list != null) 
                ApplicationInformation appInfo = MyApplication.getApplicationInformation(app.getPackageName());
                try 
                    applicationInfo = pm.getApplicationInfo(app.getPackageName(), 0);
                 catch (PackageManager.NameNotFoundException e) 
                    e.printStackTrace();
                
                String appName = (pm.getApplicationLabel(applicationInfo) == null) ? app.getApplicationName() : (String) pm.getApplicationLabel(applicationInfo);

                List<UsedApplication> listUsa = appInfo.getApplicationToUsedApp();
                for (UsedApplication usa : listUsa) 
                    if (DateUnit.compare2Days(usa.getDate(), app.getDate())) 
                        Calendar cal = Calendar.getInstance();
                        cal.setTime(new Date(usa.getDate().getTime()));
                        String dateApp = cal.get(Calendar.DAY_OF_MONTH) + "-" + DateUnit.MonthtoString(cal.get(Calendar.MONTH)) + "-" + cal.get(Calendar.YEAR);
                        Map<String, String> datamap = new HashMap<String, String>();
                        String results = dateApp + "_" + usa.getTime();
                        datamap.put("dataKey", appName);
                        datamap.put("dataValue", results);
                        datamap.put("company", "Privowny");
                        datamap.put("encrypt", String.valueOf(false));
                        if (app.getKeyId() == null) CallAPI.sendPost(datamap);
                        else CallAPI.sendPut(datamap, app.getKeyId());
                    
                
            
            stop = true;
        
    
    if(stop) progressDialog.dismiss();


如果有很多数据线需要更新,我想显示progressDialog 告诉用户等待。

我尝试在方法中使用progressDialog,但它没有出现。

在这里,我不能使用 AsynTask 类,因为在我的方法中,类 CallAPI.sendPut (CallAPI.sendPost) 已经使用了 Asyntask。我想如果我在这里使用它,会发生线程冲突。

有什么想法吗?

【问题讨论】:

你确定你的方法正在执行并且变量 stop 是假的吗? , 这一行 if(stop) progressDialog.dismiss();导致进度对话框消失! 嗨 Elenasys,我通过添加日志检查了我的代码并调用了我的方法。在方法开始时,我设置了 stop=false,在将数据发布或放入服务器后,将其设置为 true,以便可以关闭 progressDialog。 【参考方案1】:

您需要在不同的线程上完成您的工作(同时进行的所有事情)。现在一切都在解释你所看到的主线程上

【讨论】:

嗨 Ligi,我们可以在线程中调用 asyncsTask 吗?非常感谢!【参考方案2】:

请在异步任务完成时使用回调 (CallAPI.sendPut)。

【讨论】:

以上是关于ProgressDialog 未显示在活动中的主要内容,如果未能解决你的问题,请参考以下文章

从 DialogFragment 调用的 AsyncTask 中的 ProgressDialog 未显示

从 Activity 调用时,另一个 AsyncTask 类中的 ProgressDialog 未显示

ProgressDialog 不显示 [重复]

使用 ProgressDialog 和 AsyncTask 避免样板?

返回活动后如何停止progressDialog?

转Android ProgressDialog的使用