如何在android中完成AsyncTask类的活动?

如何在android中完成AsyncTask类的活动?,android,android-asynctask,activity-finish,Android,Android Asynctask,Activity Finish,我有一个汉堡包菜单的活动。当我点击汉堡菜单注销入口时,它将调用一个AsyncTask。调用API后,如果状态代码指示成功,那么我需要调用loginactivity。到目前为止,它工作正常,但我的问题是,当我在登录中按下后退按钮时,它会返回到上一个屏幕。如何解决这个问题?如何在AsyncTask中完成活动 public class LandingActivityNew extends AppCompatActivity { mNavigationView.setNavigationItemS

我有一个汉堡包菜单的活动。当我点击汉堡菜单注销入口时,它将调用一个
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;
        }

    });

}
像这样的异步任务类

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);
    }
}
 }
公共类LogoutAsyncTask扩展了AsyncTask{
语境;
公共LogoutAsyncTask(上下文){
this.context=上下文;
}
@凌驾
受保护的void onPreExecute(){}
@凌驾
受保护的字符串doInBackground(字符串…参数){}
@凌驾
受保护的void onPostExecute(字符串文件\u url){
if(pDialog.isShowing()){
pDialog.disclose();
}
int-appStatusCode=getLogoutResponse.getAppStatusCode();
if(appStatusCode==常量。应用程序状态代码成功){
***意图注销=新意图(上下文、LoginActivity.class);
上下文。开始触觉(注销);
((活动)上下文).finish()***
}否则{
ExceptionMessages.showAlertDialog(上下文,“无法注销”,getLogoutResponse.getMessages().get(0),true);
}
}
}
在onPost()中,我需要完成活动调用,如何完成?

试试这种方法

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

Intent iobj = new Intent(Activity_First.this, Activity_Second.class);
iobj.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK | Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(iobj);
如何在android中完成AsyncTask类的活动

因为传递
LandingActivityNew.this
LogoutAsyncTask
类中。按如下方式操作:

((LandingActivityNew)context).finish();
onPostExecute
方法中

Intent logout=new Intent(yourActivity.this,LoginActivity.class);
        yourActivity.this.startActivity(logout);
        yourActivity.this.finish();
如何在android中完成AsyncTask类的活动

因为传递
LandingActivityNew.this
LogoutAsyncTask
类中。按如下方式操作:

((LandingActivityNew)context).finish();
onPostExecute
方法中

Intent logout=new Intent(yourActivity.this,LoginActivity.class);
        yourActivity.this.startActivity(logout);
        yourActivity.this.finish();
希望它能起作用。塔克斯。如果这不起作用,告诉我我给你更好的答案


希望它能起作用。塔克斯。如果这不起作用,请告诉我我给你更好的答案

用以下代码更改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);
            }
        }
    }
公共类LogoutAsyncTask扩展了AsyncTask{
活动;
着陆活动新obj;
公共LogoutAsyncTask(活动){
这个。活动=活动;
obj=activity.getApplicationContext();
}
@凌驾
受保护的void onPreExecute(){
}
@凌驾
受保护的字符串doInBackground(字符串…参数){
}
@凌驾
受保护的void onPostExecute(字符串文件\u url){
if(pDialog.isShowing()){
pDialog.disclose();
}
int-appStatusCode=getLogoutResponse.getAppStatusCode();
if(appStatusCode==常量。应用程序状态代码成功){
***意向注销=新意向(活动、LoginActivity.class);
活动。开始触觉(注销);
obj.finish();
}否则{
ExceptionMessages.showAlertDialog(活动“无法注销”,getLogoutResponse.getMessages().get(0),true);
}
}
}

使用以下代码更改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);
            }
        }
    }
公共类LogoutAsyncTask扩展了AsyncTask{
活动;
着陆活动新obj;
公共LogoutAsyncTask(活动){
这个。活动=活动;
obj=activity.getApplicationContext();
}
@凌驾
受保护的void onPreExecute(){
}
@凌驾
受保护的字符串doInBackground(字符串…参数){
}
@凌驾
受保护的void onPostExecute(字符串文件\u url){
if(pDialog.isShowing()){
pDialog.disclose();
}
int-appStatusCode=getLogoutResponse.getAppStatusCode();
if(appStatusCode==常量。应用程序状态代码成功){
***意向注销=新意向(活动、LoginActivity.class);
活动。开始触觉(注销);
obj.finish();
}否则{
ExceptionMessages.showAlertDialog(活动“无法注销”,getLogoutResponse.getMessages().get(0),true);
}
}
}

您所说的“完成活动呼叫”是什么意思?您想完成活动吗?您所说的“完成活动呼叫”是什么意思?你想完成活动吗?很好很干净的解决方案!但在许多屏幕中使用的注销任务……那么我如何在post()上应用特定的类名呢????这是一个很好的干净解决方案!但是注销异步任务在许多屏幕中都使用…那么我如何在POST()上应用特定的类名?这里logoutAsyncTask是一个单独的类。。。此asynctask是从许多活动中调用的logoutAsyncTask是一个单独的类。。。此asynctask在许多活动中调用如果我在landingActivitynew中调用此asynctask,则这是确定的。。。但是我从不同的类中调用了这个LogoutAsyncTask。。。那么我如何在AsyncTask中创建特定的类对象???是的,我尝试了。。。它只适用于着陆活动新建。。。但它不适用于其他课程…谢谢你的老板。。。这对于Asynctask的特定活动非常有效。如果我从landingActivitynew调用此Asynctask,则可以。。。但是我从不同的类中调用了这个LogoutAsyncTask。。。那么我如何在AsyncTask中创建特定的类对象???是的,我尝试了。。。它只适用于着陆活动新建。。。但它不适用于其他课程…谢谢你的老板。。。这对于Asynctask的特定活动非常有效。我调用的是Asynctask而不是活动。。。n我想在onPost()中完成活动,只需编写您的活动。this.finish();在AsyncTask的onPost方法中,我正在调用AsyncTask而不是活动。。。n我想在onPost()中完成活动,只需编写您的活动。this.finish();异步任务的onPost方法