我有一些代码(最后包含完整的方法),其中包括一个“进度”对话框。 问题在于“进度”对话框没有显示任何进度(它没有从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();
}
});
}
答案 0 :(得分:0)
我认为缺少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();
答案 1 :(得分:0)
为什么不调用一个函数来做一件事
declare @model table (
Model varchar(100)
, Model_id varchar(100), Model_num varchar(100)
, Catg_code varchar(100)
);
declare @car table(Model_id varchar(100));
declare @prod table(Model_id varchar(100), Prod_cd varchar(100))
declare @master table(Model_id varchar(100), StartDate date, EndDate date);
insert into @master(Model_id, StartDate, EndDate)
values
('011', '2020-04-04', '2020-04-04')
, ('022', '2019-05-05', '2019-06-05');
insert into @prod(Model_id, Prod_cd)
values
('011', 'prod-cd-01')
, ('022', 'prod-cd-02');
insert into @model(Model, Model_id, Model_num, Catg_code)
values
('CD', '011', '100001', 'catg-code-01')
, ('EM', '022', '200001', 'catg-code-02');
insert into @car(Model_id)
values ('011'), ('022'), ('011'), ('011');
select p.Model_id, p.Prod_cd
, (
select count(1)
from @model as m
inner join @car as c on m.Model_id = c.Model_id
where m.Model = 'CD'
and m.Model_id = p.Model_id
) as m_cnt
, (
select count(1)
from @model as m
inner join @car as c on m.Model_id = c.Model_id
where m.Model = 'EM'
and m.Model_id = p.Model_id
) as e_cnt
, m.StartDate, m.EndDate
from @prod as p
inner join @master as m on p.Model_id = m.Model_id
答案 2 :(得分:0)
一个可能的问题是您正在从非UI线程更新进度栏。
您可以尝试将setProgress
调用移至UI线程:
(假设您的方法在活动中)
YourActivity.this.runOnUiThread(new Runnable(){
public void run(){
progressDialog.setProgress(intProgress);
}
});