android-studio - Android Studio 进度对话框未显示进度?
问题描述
我有一些代码(最后包含完整方法),其中包括一个进度对话框。问题是进度对话框没有显示任何进度(它没有从 0 移动到 100),它保持为零,没有移动,直到代码完成然后消失。所以它出现在正确的时间并在正确的时间被解雇,但它没有显示两者之间的进度。
这是我尝试增加对话框的部分。intProgress 变量正在工作,我可以在日志中看到它从 0 递增到 100 那么为什么不会在进度对话框中显示呢?
for(Animal animal : lstAnimals) {
i = i + 1;
animal.addToSqlLite(strTableName, animal, sqLiteDatabase);
int intProgress = (int) (((double) (i) / (double) lstAnimals.size()) * 100);
Log.d(TAG, "vvvv: " + "i = " + i + " total = " + lstAnimals.size() + " prog = " + intProgress);
progressDialog.setProgress(intProgress);
}
完整方法在这里:
// fetches data from the server and copies it across to the sqlite database
public void fetchDataFromServerAndAddToSqlLite(ProgressBar progressBar, String strTableName, SQLiteDatabase sqLiteDatabase, Context context) {
// progressBar.setVisibility(View.VISIBLE);
ProgressDialog progressDialog = new ProgressDialog(context);
progressDialog.setTitle("Wildgoosechase");
progressDialog.setMessage("Downloading Animals...");
progressDialog.setProgressStyle(progressDialog.STYLE_HORIZONTAL);
progressDialog.setCancelable(false);
progressDialog.setMax(100);
progressDialog.setProgress(0);
progressDialog.show();
Retrofit retrofit = new Retrofit.Builder()
.baseUrl("https://xxxxxxxxxxxx.co.za/")
.addConverterFactory(GsonConverterFactory.create())
.build();
wildgoosechaseAPI myWildGooseChaseApi = retrofit.create(wildgoosechaseAPI.class);
retrofit2.Call<List<Animal>> call = myWildGooseChaseApi.getAnimals();
call.enqueue(new Callback<List<Animal>>() {
@Override
public void onResponse(Call<List<Animal>> call, Response<List<Animal>> response) {
if(!response.isSuccessful()){
// progressBar.setVisibility(View.GONE);
progressDialog.dismiss();
}
List<Animal> lstAnimals = response.body();
int i = 0;
for(Animal animal : lstAnimals) {
i = i + 1;
animal.addToSqlLite(strTableName, animal, sqLiteDatabase);
int intProgress = (int) (((double) (i) / (double) lstAnimals.size()) * 100);
Log.d(TAG, "vvvv: " + "i = " + i + " total = " + lstAnimals.size() + " prog = " + intProgress);
progressDialog.setProgress(intProgress);
}
// progressBar.setVisibility(View.GONE);
progressDialog.dismiss();
}
@Override
public void onFailure(Call<List<Animal>> call, Throwable t) {
// progressBar.setVisibility(View.GONE);
progressDialog.dismiss();
}
});
}
解决方案
一个可能的问题是您正在从非 UI 线程更新进度条。您可以尝试将setProgress
调用移至 UI 线程:
(假设您的方法在活动中)
YourActivity.this.runOnUiThread(new Runnable(){
public void run(){
progressDialog.setProgress(intProgress);
}
});
推荐阅读
- r - 根据 r 中 data.table 中的多个条件创建列
- html - 如何在倒梯形(形状)内写文字?
- ssh - 如何通过 gsutil 复制/scp 文件到谷歌云虚拟机?
- javascript - 如何从不是父或子的另一个组件更改功能组件的状态?
- javascript - 使用单选按钮限制选择(复选框)
- github - 链接到特定的分支、标记或提交,或其中的特定文件,或该文件中的特定行?
- javascript - 如何确定访客是否在 Google 日历脚本中回答“是”?
- django - Django REST Framework,设置 Django Storages/S3 Boto 将一些媒体文件存储到存储桶,一些存储到本地存储
- mysql - 如何将sql结果作为对象获取
- windows - 使用 zip 命令指定与当前目录不同的路径