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 未显示