Как завершить активность из класса AsyncTask в Android?

У меня есть активность с меню гамбургера. Когда я нажимаю на кнопку выхода из меню гамбургера, он вызывает AsyncTask, После вызова API, если код состояния указывает на успех, мне нужно вызвать loginactivity. До этого все работает нормально, но моя проблема в том, что когда я нажимаю кнопку "Назад" при входе в систему, он возвращается к предыдущему экрану. Как это исправить? Как мне закончить деятельность в AsyncTask?

public class LandingActivityNew extends AppCompatActivity {
   mNavigationView.setNavigationItemSelectedListener(new NavigationView.OnNavigationItemSelectedListener() {
        @Override
        public boolean onNavigationItemSelected(MenuItem menuItem) {
            drawerLayout.closeDrawers();
            int id = menuItem.getItemId();
            switch (id){
                case R.id.navItemSettings:
                    Intent iSettings = new Intent(LandingActivityNew.this,SettingsActivity.class);
                    startActivity(iSettings);
                    finish();
                    break;
                case R.id.navItemTC:
                   // Toast.makeText(LandingActivityNew.this, "Settings", Toast.LENGTH_LONG).show();
                    Intent iTerms = new Intent(LandingActivityNew.this,TermsConditions.class);
                    startActivity(iTerms);
                    break;
                case R.id.navItemPrivacy:
                    //Toast.makeText(LandingActivityNew.this, "Privacy", Toast.LENGTH_LONG).show();
                    Intent iPrivacy = new Intent(LandingActivityNew.this,ConsentActivity.class);
                    startActivity(iPrivacy);
                    break;
                case R.id.navItemReportProblem:
                    Toast.makeText(LandingActivityNew.this, "Report a Problem", Toast.LENGTH_LONG).show();
                    break;
                case R.id.navItemFAQ:
                    Toast.makeText(LandingActivityNew.this, "FAQ", Toast.LENGTH_LONG).show();
                    break;
                case R.id.navItemShare:
                    Toast.makeText(LandingActivityNew.this, "Share", Toast.LENGTH_LONG).show();
                    break;
                case R.id.navItemLogout:
                    new LogoutAsyncTask(LandingActivityNew.this).execute();
                    break;

            }
            return false;
        }

    });

}

Класс AsyncTask, как это...

public class LogoutAsyncTask extends AsyncTask<String,String,String> {
   Context context;  
   public LogoutAsyncTask(Context context){
    this.context = context;
    }
   @Override
protected void onPreExecute() {}
@Override
protected String doInBackground(String... params) {}
   @Override
protected void onPostExecute(String file_url) {
    if (pDialog.isShowing()) {
        pDialog.dismiss();
    }
    int appStatusCode = getLogoutResponse.getAppStatusCode();
    if (appStatusCode == Constants.APP_STATUS_CODE_SUCCESS) {
        ***Intent logout=new Intent(context,LoginActivity.class);
        context.startActivity(logout);
        ((Activity)context).finish();***
    } else {
        ExceptionMessages.showAlertDialog(context, "Unable to Logout", getLogoutResponse.getMessages().get(0), true);
    }
}
 }

в onPost() мне нужно завершить вызов активности, как это сделать?

4 ответа

Решение

Попробуйте так,

Intent iobj = new Intent(Activity_First.this, Activity_Second.class);
iobj.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK | Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(iobj);

Как завершить активность из класса AsyncTask в Android?

Потому что прохождение LandingActivityNew.this в LogoutAsyncTask учебный класс. Сделай это как:

((LandingActivityNew)context).finish();

в onPostExecute метод

Intent logout=new Intent(yourActivity.this,LoginActivity.class);
        yourActivity.this.startActivity(logout);
        yourActivity.this.finish();

Надеюсь, что это работает. Thanx. Если это не сработает, скажи мне, я дам тебе лучший ответ

Измените LogoutAsyncTask с кодом ниже:

public class LogoutAsyncTask extends AsyncTask<String, String, String> {
        Activity activity;
        LandingActivityNew obj;

        public LogoutAsyncTask(Activity activity) {
            this.activity = activity;
            obj = activity.getApplicationContext();
        }

        @Override
        protected void onPreExecute() {
        }

        @Override
        protected String doInBackground(String... params) {
        }

        @Override
        protected void onPostExecute(String file_url) {
            if (pDialog.isShowing()) {
                pDialog.dismiss();
            }
            int appStatusCode = getLogoutResponse.getAppStatusCode();
            if (appStatusCode == Constants.APP_STATUS_CODE_SUCCESS) {
                ***Intent logout=new Intent(activity,LoginActivity.class);
                activity.startActivity(logout);
                obj.finish();
            } else {
                ExceptionMessages.showAlertDialog(activity, "Unable to Logout", getLogoutResponse.getMessages().get(0), true);
            }
        }
    }
Другие вопросы по тегам