如果我没有得到回复,ProgressDialog会在特定时间内完成

时间:2016-12-08 10:56:49

标签: android progressdialog

我在调用API时使用ProgressDialog,并在收到服务器的响应后将其关闭,但我希望此ProgressDialog仅显示20秒。如果API响应未在20秒内出现,则此ProgressDialog将关闭,然后我将关闭我的活动并显示1条消息。这是我的方法:

myProgressDialog在课程级别定义:

ProgressDialog myProgressDialog;
myProgressDialog= new ProgressDialog(FlyerActivity.this);
myProgressDialog.setMessage("Loading");
myProgressDialog.setCancelable(false);
myProgressDialog.show();
myAPIcallingMethod();

myAPIcallingMethod实施:

private void myAPIcallingMethod(){
    someAPICall;
    if (myProgressDialog.isShowing()){
        myProgressDialog.dismiss();
    }
}

现在在某些API中我希望如果API响应在20秒后没有响应,那么此ProgressDialog将会消失。

3 个答案:

答案 0 :(得分:0)

使用此

  private static int TIME_OUT = 1000 * 20;
 new Handler(Looper.getMainLooper()).postDelayed(new Runnable()
                {
                    @Override
                    public void run()
                    {
                        //Do something here
                        progress.dismiss();
                    }
                }, TIME_OUT);

答案 1 :(得分:0)

使用Handler延迟所需的20秒

Handler handler = new Handler(Looper.getMainLooper());

//This will get called when response is not received in 20 sec. **call this where you are hitting your server.**

   handler.postDelayed(new Runnable() {
    @Override
    public void run() {
    //hide Progressbar here or close your activity.
      if(progressbar!=null && progressbar.isShowing())
      {
      progressbar.dismiss();
      }

    }
},20*1000);


//**on Response**  remove the callback from that handler so that your app will not get crashed if service respond within 20 sec.

handler.removeCallbacksAndMessages(null);
  

删除任何待处理的回调帖子,并发送obj为令牌的邮件。如果token为null,则将删除所有回调和消息。

或者您可以在api请求中将所需的超时值放在您的案例中20秒。

答案 2 :(得分:0)

我的方法是在APICall上将timeout设置为20秒。然后有一个特定的回调,反过来可以解除对话。

我无法看到你的APICall如何运作,所以此时我无法真正帮助你。