我使用Asynctasks來驗證EditTexts上的一些輸入,問題是,即使asinctasks在doinbackground()部分,當我按下下一個按鈕時,它將轉到下一個活動。我的問題是我使用asynctasks進行驗證。等待Asynctasks完成後再繼續新的活動
這裏是我的下一個按鈕代碼:
@Override
public void onNextClicked(StepperLayout.OnNextClickedCallback callback) {
getData();
new VerifyAppNameTask().execute(sAppName);
f2 = edtAppCategoryET(sAppCategory);
f3 = edtAppPlatformET(sAppPlatform);
f4 = edtAppDescriptionET(sAppDescription);
f5 = edtAppVersionET(sAppVersion);
if (!f1 && !f2 && !f3 && !f4 && !f5)
{
bundleData = new Bundle();
bundleData.putString("appName", sAppName);
bundleData.putString("appCategory", sAppCategory);
bundleData.putString("appPlatform", sAppPlatform);
bundleData.putString("appVersion", sAppVersion);
bundleData.putString("appDescription", sAppDescription);
callback.goToNextStep();
}
else
{
displaySnackBar("Cannot proceed. Please fix the errors.").show();
}
}
而爲的AsyncTask:
class VerifyAppNameTask extends AsyncTask<String, Void, String> {
// use doInBackground() to make network calls, the returned value is
// sent to onPostExecute()
@Override
protected String doInBackground(String... data) {
if (data[0].replace(" ","").isEmpty())
{
f1 = true;
return "1";
}
else if (data[0].length() > 25)
{
f1 = true;
return "2";
}
else if (checkAppName(data[0]))
{
f1 = true;
return "3";
}
else
{
f1 = false;
return "4";
}
}
@Override
protected void onPostExecute(String result) {
tilAppName.setErrorEnabled(true);
switch(result)
{
case "1": {tilAppName.setError("You can't leave this empty.");break;}
case "2": {tilAppName.setError("Maximum of 25 characters.");break;}
case "3": {tilAppName.setError("App Name already used.");break;}
case "4": {tilAppName.setError(null);tilAppName.setErrorEnabled(false);break;}
}
}
}
我需要的是,當我點擊下一步按鈕,就應該等待所有asynctasks完成第一。
大。如果我有更多的Asynctask呢?和我的註冊頁面一樣,我有兩個以上的asynctasks,一個是學生證,電子郵件和用戶名。我需要創建asynctasks,以便我可以在檢查第一個edittext時將輸入添加到其他字段,而不是在繼續到另一個字段之前等待結果。 –
@PaulJohnPulumbarit你可以按順序做。你也可以調用asynctak1並在asynctask1中依次調用asynctask2,最後在asynctask中添加你想要實現的代碼,在asynctask後執行 –
好吧我試試吧。謝謝您的幫助! –