如何使用Volley Android显示ProgressBar更新

时间:2018-03-21 12:03:19

标签: android android-progressbar

我在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上指定的方式。

那么如何显示所有步骤?怎么了?

2 个答案:

答案 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);
        }
     })
}