我在调用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
将会消失。
答案 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如何运作,所以此时我无法真正帮助你。