我在ProgressBar上显示进度时遇到问题。
我有使用Volley调用我的服务器的函数,当返回结果时我已经实现了一个将数据返回给我的活动的Callback。
类似的东西:
\\0
假设在循环中调用该函数,如:
public static void saveData(Data data, final VolleyCallbackJsonObject callback){
...
callback.onSuccessResponse(new JSONObject());
...
}
我想显示一个ProgressBar,显示从1/5到5/5
的进度条所以我在activityClass中有我的功能:
for(int i = 1; i<=5; i++){
final int copyIndex = i;
MyClass.saveData(new Data(i), new VolleyCallbackJsonObject() {
@Override
public void onSuccessResponse(JSONObject result) {
callFunctionForShowAndUpdateProgress(copyIndex);
}
})
}
}
我的问题是进度条没有设置进度,但它只显示在结尾,所以用5/5而不显示进度步骤(1 / 5,2 / 5,3 / 5,4 / 5)然后它将在3秒后隐藏在postDelayed上指定的方式。
那么如何显示所有步骤?怎么了?
答案 0 :(得分:2)
尝试在方法'onSuccessResponse'中postDelay方法'callFunctionForShowAndUpdateProgress'而不是你正在制作的postDelay,因为你所做的延迟只发生在i = 5时,所以从技术上来说,进展会经过2,3和4但是你没有看到它。
在'onSuccessResponse'中试试这个:
Handler handler = new Handler();
handler.postDelayed(new Runnable() {
@Override
public void run() {
callFunctionForShowAndUpdateProgress(copyIndex);
}
}, 3000);
顺便说一句,当调用方法'callFunctionForShowAndUpdateProgress'时
'onSuccessResponse'索引最初将为1,这很好,然后编译器将转到第二个if语句
if(pb != null){
pb.setProgress(index);
}
并将执行它,因为那里的条件是正确的,它不会导致问题,但是这样做不是一个好习惯,解决这个问题会阻止编译器通过添加else进入这个if语句。
我希望有帮助
答案 1 :(得分:0)
如下所示更改循环调用功能,然后检查
int copyIndex = 1;
callFunctionForShowAndUpdateProgress(copyIndex);
for(int i = 1; i<=5; i++)
{
MyClass.saveData(new Data(i), new VolleyCallbackJsonObject()
{
@Override
public void onSuccessResponse(JSONObject result)
{
copyIndex++;
callFunctionForShowAndUpdateProgress(copyIndex);
}
})
}