2016-02-29 30 views
2

我創建了一個android應用程序,它使用異步任務調用web服務, 當認證失敗時,用戶將停止當前活動並重定向回登錄頁面。activity.finish()未停止當前活動

我的問題是,當用戶重定向回登錄頁面,吐司文本仍然顯示,這個吐司文本是在異步線程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(); 
    } 
} 
+0

請出示一些代碼 –

+0

兄弟公司工作的任何語法錯誤,這 返回請求的狀態? – saeed

+0

如果你在這裏引用部分代碼會更好。 –

回答

0

可以使用

Toast toast = Toast.makeText(getApplicationContext(), "", Toast.LENGTH_LONG); 

,並呼籲之前創建吐司使用下面的代碼

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

讓我知道你的結果 – saeed

-1

時驗證失敗,用戶將停止當前活動並重定向回登錄頁面取消敬酒。

與你上面的問題,我假設你有兩個不同的活動(一個用於登錄,另一個用於做某些事情也顯示吐司消息,如果它正確,那麼在顯示吐司之前檢查活動是否完成,如果不是,則顯示致祝酒辭。

if(!isFinishing()){ 

// show toast 
} 

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

0

onPause()添加以下代碼

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

嘗試李柯從doInBackground.and顯示敬酒使用onPostExecute 這種地位可能有這code.But我希望它幫你

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{ 

} 
} 
}