我有一些代码(最后包含完整的方法),其中包括一个Progress对话框。问题是“进度”对话框没有显示任何进度(它没有从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();
}
});
}
我认为缺少thraed //线程用于更改进度值
Thread thread = new Thread(new Runnable() {
@Override
public void run() {
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
setProgressValue(progress + 1);
}
});
thread.start();