2011-07-16 40 views
31

我想登錄活動啓動時,用戶啓動應用程序,但尚未登錄之前。如果之前已完成成功的登錄,該應用將跳過登錄頁面並移至MainMenu.java。 我現在擁有的是:Android檢查用戶登錄之前,否則啓動登錄活動

public class Login extends Activity implements OnClickListener, TaskCompleteCallback{ 

    first_time_check(); 

... 
@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.configure); 

    ...} 

private boolean first_time_check() {  
    String first = mPreferences.getString("first", null); 
     if((first == null)){ 
      Intent i = new Intent(Login.this, MainMenu.class); 
      startActivity(i); 
     } 
     return false; 
    } 

... 
     SharedPreferences.Editor editor = mPreferences.edit(); 
     editor.putString("first", value); 
    ... 

     editor.commit();   

     // Close the activity 
     Intent i = new Intent(Login.this, MainMenu.class); 
     startActivity(i); 
    }   

,但我得到的FC。我如何實現SharedPreferences有什麼問題?

+0

您的onCreate()中是'first_time_check()'還是忘記在上面顯示的代碼中添加onCreate()的關閉?在你的代碼的commit()等代碼中還有什麼功能? –

+0

我把它放在了onCreate之後。如果我把它放進去,我會遇到很多錯誤。我應該嗎? – bernlim

+0

不,但您上面顯示的代碼似乎沒有反映出這一點。 –

回答

13

您的代碼從未調用過first_time_check(),因此在返回用戶的情況下自動轉發不起作用。

你可以在onCreate()

protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 

    first_time_check(); 

    setContentView(R.layout.configure); 

    ...} 

因此,對於新用戶,first_time_check()將轉發他到登錄頁面,否則將 顯示當前的佈局,他可以繼續在此頁上。

+0

這是有道理的。但是在實施您的解決方案後,我獲得了FC。我如何使用sharedpreferences有什麼問題嗎? – bernlim

+0

現在好了。我在調用mPreferences之後放置了first_time_check()。非常感謝! – bernlim

+0

@bernlim你把它放在'mPreferences'之後,沒關係。但兩者都在調用'setContentView()'之前,對吧? –

4

您正在使用共享偏好設置。那很好。

這個鏈接中有一個小例子。這可能會解決問題。

http://developer.android.com/guide/topics/data/data-storage.html

基本上,我沒有看到你讀取存儲的值。您正在存儲它,然後進行提交。但是你沒有閱讀代碼。只有當你閱讀它時,你才能決定哪個活動必須啓動。你必須調用first_time_check()來解決這個問題。

希望我能夠幫助你。

+0

謝謝!瞭解更多 – bernlim

0

您可以在onSaveInstanceState()方法中詳細保存日誌,然後在您的活動重新啓動時將其恢復。例如在onRestore()中。

0

這可以通過兩種方式完成。一種是將它們存儲在全局變量中,另一種是將數據存儲在共享首選項中。請參閱this示例。