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

时间:2016-02-29 03:57:43

标签: android android-asynctask

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

我的问题是当用户重定向回登录页面时,仍会显示一个Toast文本,此toast文本位于异步线程onPostExceute()事件中。

解决这个问题的任何方法?

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

4 个答案:

答案 0 :(得分:0)

你可以使用

一样创建Toast
$('#idTourDateDetails').datepicker({
      monthNames: [ "Januari", "Februari", "Maret", "April", "Mei", "Juni", "Juli", "Agustus", "September", "Oktober", "November", "Desember" ],
            dayNames: [ "Minggu", "Senin", "Selasa", "Rabu", "Kamis", "Jumat", "Sabtu" ],
            dayNamesMin: [ "M", "S", "S", "R", "K", "J", "S" ],
//                        showOn: 'both',
            dateFormat: 'yy-mm-dd',
            changeMonth: true,
            changeYear: true,
            inline: true,
            yearRange: '-100:-12',
            defaultDate: '1916-01-01'
 });

并在使用以下代码

取消致敬之前调用 Toast toast = Toast.makeText(getApplicationContext(), "", Toast.LENGTH_LONG);
finish()

答案 1 :(得分:0)

onPause()添加以下代码

if(isFinishing()){
    if (toast != null || toast.getView().getWindowVisibility() == View.VISIBLE) {
        toast.cancel();
    }
}

答案 2 :(得分:0)

试试这样 从doInBackground返回请求状态,并在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{

 }
}
}

答案 3 :(得分:-1)

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

根据您的上述问题,我假设您有两个不同的活动(一个用于登录,另一个用于做某事也显示吐司消息。如果正确则在显示吐司之前检查活动是否正在完成如果没有那么显示吐司

if(!isFinishing()){

 // show toast
}

http://developer.android.com/reference/android/app/Activity.html#isFinishing%28%29