我在Android中创建新项目时创建了默认登录活动。 默认情况下,创建一个可以正常登录和显示的progressBar。所有这一切都通过AsyncTask实现。
现在我使用Retrofit 2让Async登录。
当我按下按钮登录时,启动了一个内容:
的方法 ....
....
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主线程上做了太多工作。
如何解决这个问题?
我会有很多异步调用,我总是会显示一个进度条,等待响应完成。
谢谢
答案 0 :(得分:0)
让我与您分享Android Studio和我的Retrofit实现创建的默认登录活动的代码实现。默认登录活动,包括调用AsyncTask
的{{1}},在其中,我完成了所有登录逻辑工作。我使用的是UserLoginTask
而不是.execute
,因为它是同步的,我们不需要.enqueue
内的新线程
AsyncTask
答案 1 :(得分:0)
无耻推广
我为此创建了RxLoading library,它可以做到这一点以及更多,
你可以做这样的事情:networkCall().compose(RxLoading.<>create(loadingLayout)).subscribe(...);
它由2个类组成,一个自定义视图(loadingLayout)和一个将transformer粘合在一起的RxLoading,您可以选择使用它们中的任何一个或两个。
你需要在rxJava中使用retrofit2。
RxLoading还支持空状态和错误状态(内置重试机制,因此请务必检查此选项)
您可以在GitHub page上找到更多信息。