2011-07-16 70 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示例。