我想知道什麼是做到這一點的最好辦法:我查詢到需要記錄用戶的API檢查用戶登錄和啓動LoginActivity
。當應用程序開始進行登錄時,如果它正確,將存儲用戶/傳入首選項。
一旦我們記錄了,如果在我試圖從API調用方法的任何活動中發生NOT_LOGGED錯誤,我將從首選項中檢索用戶/密碼並再次執行登錄。 如果成功,我的程序將再次嘗試API查詢。如果不是,則會打開LoginActivity。這就是我不知道最好做什麼的地方。
作爲「Relogin」的使用方法,我已決定在MyApp中實現,這是一個從Application延伸並保持對象在Activityitiy的所有生命週期中一直存在的類。但是我無法從那裏關閉一堆活動,對嗎? 我的想法是關閉的活動當前堆棧並打開登錄一個,使用此:
if(!mMyApp.relogin(mCtx)){
Intent intent=new Intent(mCtx,ActivityLogin.class);
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(intent);
finish();
}
但我不得不打電話從適當的活動方法完成,但沒有從MyApp的。 所以我必須重複所有我使用relogin(mCtx)
方法的每個類中的所有代碼。
您是否認爲我以正確的方式解決問題,還是應該改變策略?順便說一下,您認爲最好的地方是實施將從不同活動中調用的方法。到目前爲止,我一直在使用單身人士,但如果gc清理內存,我可能會失去這些信息。
謝謝, David。
你對通用上下文有什麼意思? mCtx是Activity的成員,因此如果我沒有錯,就是一個活動實例。 – Dayerman 2011-06-15 15:28:04
啊,我假設relogin簽名是'relogin(Context mCtx);',不是'relogin(Activity mCtx);'。如果你想調用'finish',它必須是第二個,因爲'finish'是一個特定於Activity的方法,並且在Context中不可用。 – Femi 2011-06-15 15:39:32
從外部使用FLAG_ACTIVTY_CLEAR_TOP調用它不起作用的活動。一個錯誤產生至極說::導致:android.util.AndroidRuntimeException:從活動上下文外調用startActivity()需要FLAG_ACTIVITY_NEW_TASK標誌。這真的是你想要的嗎? – Dayerman 2011-06-15 16:16:24