2011-06-09 16 views
0

我有一個應用程序,有時可能需要在執行過程中登錄,我正在計算如何傳遞控制權。對於身份驗證有很多不同的事情要做,所以我有一個名爲Authenticator的實用程序類負責處理所有這些事情。開始登錄活動的正確方法

總之,我想要它,所以應用程序中的所有活動都將能夠調用Authenticator.login()等方法來呈現登錄屏幕,並讓Authenticator處理所有事情。

這裏就是我想的到目前爲止的登錄方法:

public boolean login(Activity context) 
{ 
    Intent intent = new Intent(context, Login.class); 
    context.startActivityForResult(intent, LOGIN_ACTIVITY); 
    return false; 
} 

我運行到這個問題,不過,越來越結果從登錄回來,我想知道,如果他們在我將控制權交還給名爲login()的活動之前,按下了取消按鈕或輸入了不正確的密碼。

有onActivityResult()方法,但在Activity類中,而Authenticator不是一個活動。有沒有辦法從一個普通的java類中啓動一個結果的活動?

+0

您能否澄清一下,您要求用戶輸入用戶名和密碼的屏幕是一項活動? – Gopal 2011-06-09 18:53:06

+0

是的,登錄屏幕是一項活動。需要用戶登錄的應用程序中的其他活動要求Authenticator處理。然後,Authenticator會在登錄活動尚未登錄時打開登錄活動。 – Indigenuity 2011-06-09 19:04:49

+0

如果登錄屏幕是活動,那麼您可以setResult從Authenticator類獲得並將其發送回呼叫活動。並在你的通話活動中做相應的處理。該鏈接解釋瞭如何將當前活動的結果傳遞給以前的活動。 [LINK](http://stackoverflow.com/questions/1124548/how-to-pass-the-values-from-one-activity-to-previous-activity)。希望這個幫助。 – Gopal 2011-06-09 19:12:56

回答

0

雖然它不是一個完美的解決方案,這是我最後還是沒買:

不與使用的身份驗證,而不是在開始活動(登錄屏幕)的結果,我的活動情侶登錄屏幕使用登錄屏幕的onFinish()方法來調用Authenticator中的方法來傳回結果。

,詢問認證器現在登錄的任何活動還實現一個接口的一個方法:

public void onLoginComplete(boolean successful); 

的身份驗證器然後使用此方法回覆到調用活動。

儘管這不是解決問題的最簡單方法,但我的程序中的活動現在與登錄屏幕分離,只與Authenticator進行交互。

1

在您的示例中,Activity傳入時context將在登錄完成時獲得回調。我不認爲有一種方法可以在非活動類中發生回調。

一個選項是創建一個基地Activity,AuthenticatedActivity,您的所有活動都從中延伸。它有點笨重的解決方案,但它可以讓你在一個地方處理所有的授權工作。