Android activity.finish()未在当前活动中停止

Android activity.finish()未在当前活动中停止,android,android-asynctask,Android,Android Asynctask,我创建了一个android应用程序,它使用异步任务调用web服务, 当身份验证失败时,用户将停止当前活动并重定向回登录页面 我的问题是,当用户重定向回登录页面时,toast文本仍然显示,该toast文本位于异步线程onpostexute事件下 这个问题有什么解决办法吗 在webService.cs中 catch (UnauthorizedException ua) { Log.d(tag, ua.getMessage()); Intent intent = new

我创建了一个android应用程序,它使用异步任务调用web服务, 当身份验证失败时,用户将停止当前活动并重定向回登录页面

我的问题是,当用户重定向回登录页面时,toast文本仍然显示,该toast文本位于异步线程onpostexute事件下

这个问题有什么解决办法吗

在webService.cs中

catch (UnauthorizedException ua) {
        Log.d(tag, ua.getMessage());
        Intent intent = new Intent(activity, LoginActivity.class);
        if(condition a){
            intent.putExtra("toast_text", R.string.a);
        }else{
            intent.putExtra("toast_text", R.string.b);
        }
        activity.finish();
        activity.startActivity(intent);
}
return null;
然后在asyncTask.cs中

protected JSONArray doInBackground(String... parameters) {     
        ConnectivityManager cm =
                (ConnectivityManager) SingleFormActivity.this.getSystemService(Context.CONNECTIVITY_SERVICE);

        NetworkInfo activeNetwork = cm.getActiveNetworkInfo();
        boolean isConnected = activeNetwork != null &&
                activeNetwork.isConnectedOrConnecting();

        if (isConnected) {
        }

     return null;
}

public void onPostExecute(JSonArray result){
     if(result != null){
     }else{
          Toast.makeText(Something.this, R.string.b, Toast.LENGTH_LONG).show();
     }
}
你可以用

像烤面包一样制作

 Toast toast = Toast.makeText(getApplicationContext(), "", Toast.LENGTH_LONG);
在调用finish之前,使用下面的代码取消toast

 if (toast != null )
      toast.cancel();
你可以用

像烤面包一样制作

 Toast toast = Toast.makeText(getApplicationContext(), "", Toast.LENGTH_LONG);
在调用finish之前,使用下面的代码取消toast

 if (toast != null )
      toast.cancel();

当身份验证失败时,用户将停止当前活动并重定向回登录页面

有了上面的问题,我假设您有两个不同的活动,一个用于登录,另一个用于做一些同样显示toast消息的事情。如果正确,则在展示祝酒词之前检查活动是否已结束,如果未完成,则展示祝酒词

if(!isFinishing()){

 // show toast
}

当身份验证失败时,用户将停止当前活动并重定向回登录页面

有了上面的问题,我假设您有两个不同的活动,一个用于登录,另一个用于做一些同样显示toast消息的事情。如果正确,则在展示祝酒词之前检查活动是否已结束,如果未完成,则展示祝酒词

if(!isFinishing()){

 // show toast
}
在onPause中添加以下代码

if(isFinishing()){
    if (toast != null || toast.getView().getWindowVisibility() == View.VISIBLE) {
        toast.cancel();
    }
}
在onPause中添加以下代码

if(isFinishing()){
    if (toast != null || toast.getView().getWindowVisibility() == View.VISIBLE) {
        toast.cancel();
    }
}
像这样试试 从doInBackground.com返回请求状态,并在onPostExecute中使用该状态显示toast 这段代码可能有语法错误,但我希望它能帮助你

public class AsyncConnectTask extends AsyncTask<Void, Void, Boolean> {

private MyInterface mListener;


public AsyncConnectTask(Context context, String address, String user,
    String pass, int port, MyInterface mListener) {
               }

@Override
protected Boolean doInBackground(Void... params) {
    ....
    return result;
}


@Override
protected void onPostExecute(Boolean result) {
    if (result == true) {
        //Show toast here
}else{

 }
}
}
像这样试试 从doInBackground.com返回请求状态,并在onPostExecute中使用该状态显示toast 这段代码可能有语法错误,但我希望它能帮助你

public class AsyncConnectTask extends AsyncTask<Void, Void, Boolean> {

private MyInterface mListener;


public AsyncConnectTask(Context context, String address, String user,
    String pass, int port, MyInterface mListener) {
               }

@Override
protected Boolean doInBackground(Void... params) {
    ....
    return result;
}


@Override
protected void onPostExecute(Boolean result) {
    if (result == true) {
        //Show toast here
}else{

 }
}
}

请显示一些代码如果你在这里引用代码部分会更好。请显示一些代码如果你在这里引用代码部分会更好。让我知道你的结果让我知道你的结果