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)を強制的に:私はボタンのログインをプッシュ
は
コンテンツの方法を開始しました。 進捗バーが表示されず、デバッグには次の情報が表示されます。 Skipped 180 frames!アプリケーションがITSのメインスレッドであまりにも多くの作業をしている可能性があります。
どうすれば解決できますか?
私は、レスポンスが完了するのを待つために常にプログレスバーを表示する非同期呼び出しが多数あります。
は
UIスレッドでは 'Thread.sleep()'を呼び出さないでください。 – EpicPandaForce
mmmm .... oki ...しかし: それから私は要求が数秒かかることをシミュレートしますか?プログレスバーが表示されるようにするには? さらに、Retrofit 2でAsyncを呼び出すと、AsyncTaskが欲しいと思っていました。 – daicon
問題はあなたのshowProgress実装にあると思うし、その呼び出しが非常に速く実行され、すぐに表示されたり隠されたりしてプログレスバーを見ることができません。スリープ(ハンドラポスト)の代わりに遅延を追加すると、進行状況バーが表示されます。 – Beloo