Как завершить активность из класса 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);
}
}
}