繁体   English   中英

如何从Android中的AsyncTask类完成Activity?

[英]How to finish Activity from AsyncTask class in android?

我有一个汉堡菜单活动。 当我单击汉堡菜单注销enty时,它将调用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()中,我需要完成活动调用,该怎么做?

试试这个

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类完成Activity?

因为在LogoutAsyncTask类中传递LandingActivityNew.this 这样做:

((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);
            }
        }
    }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM