【发布时间】:2016-12-24 02:16:38
【问题描述】:
我在 Android 中创建新项目时创建了默认登录活动。 默认情况下会创建一个progressBar,可以很好地登录并正确显示。这一切都是通过 AsyncTask 实现的。
现在我使用 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()。 -
mmmm.... oki... 但是:从那以后我模拟请求需要几秒钟?这样才能保证进度条显示出来?另外,我认为使用 Retrofit 2 进行调用,所以 Async,会喜欢 AsyncTask。
-
我认为问题在于您的 showProgress 实现或该调用执行速度如此之快,并且您看不到进度条,因为它立即显示/隐藏。如果您添加延迟而不是睡眠(处理程序帖子),您将看到一个进度条。
-
感谢@Beloo,调用执行速度如此之快...... O_o。我尝试使用 hadlet post 添加延迟,效果很好
标签: android asynchronous retrofit progress