我在Android中创建一个新项目时创建了一个默认的登录活动。 默认情况下,创建一个可正常登录并正确显示的progressBar。所有这些都通过AsyncTask完成。改造2 - 如何显示进度栏异步?
现在我使用Retrofit 2进行异步登录。
当我按下按钮登录推出了内容的方法:
....
....
showProgress(true);
call.enqueue(new Callback<User>() {
@Override
public void onResponse(Call<User> call, retrofit2.Response<User> response) {
try {
Thread.sleep(3000);
} catch (InterruptedException e) {
e.printStackTrace();
}
User userdatos = response.body();
if(userdatos != null){
// redirect to Main Activity page
showProgress(false);
Intent i = new Intent(LoginActivity.this, MainActivity.class);
startActivity(i);
}
else{
showProgress(false);
mPasswordView.setError(getString(R.string.error_incorrect_password));
mPasswordView.requestFocus();
}
}
@Override
public void onFailure(Call<User> call, Throwable t) {
call.cancel();
showProgress(false);
Toast.makeText(LoginActivity.this, "Please check your network connection and internet permission", Toast.LENGTH_LONG).show();
}
});
我被迫一个的Thread.sleep(3000)来检查。 没有进度条出现,调试显示: 跳过180帧!该应用程序可能在ITS主线程上做了太多工作。
这怎么解决?
我会有很多异步调用,我总是会显示一个进度条来等待响应完成。
谢谢
您不应该在UI线程上调用'Thread.sleep()'。 – EpicPandaForce
mmmm .... oki ...但: 从那时起我模拟请求需要几秒钟?为确保显示进度条? 此外,我认为使用Retrofit 2进行调用以使Async,AsyncTask。 – daicon
我认为问题出在你的showProgress实现上,或者那个调用执行的很快,而且你无法看到进度条,因为它是立即显示/隐藏的。如果添加延迟而不是睡眠(处理程序帖子),您将看到一个进度条。 – Beloo