我在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