1

我有一个 android 应用程序,用于在我的网站上注册用户。如果我的共享首选项文件显示没有注册用户信息,我的首要任务是注册用户。

如果我的应用有注册用户,我提供以下代码来简单地自动切换到“主页”活动:

    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.signin);

        if( USERPREFERENCES.getString(USERPREFERENCES_USERMAIL, "")  == null && USERPREFERENCES.getString(USERPREFERENCES_USERID, "") == null && USERPREFERENCES.getString(USERPREFERENCES_USERNAME, "") == null){
            //setContentView(R.layout.signin);
            Toast.makeText(SignIn.this, "testing...", Toast.LENGTH_LONG).show();
        }else{
            Intent intent   =   new Intent(SignIn.this, Confirmed.class);
            startActivity(intent);
        }
... other code

因此,从我的默认活动 signin.java 中,应用程序将切换到已确认活动或保持打开并显示登录活动。

我的问题是,当系统正常工作并且我切换到确认活动时,我提供了一个注销 onclick 侦听器,如下所示:

 signout.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {
                // TODO Auto-generated method stub
                //USERPREFERENCES.cl
                Toast.makeText(Confirmed.this, "signout responding!", Toast.LENGTH_LONG).show();
                USERPREFERENCES.edit().clear().commit();
            }
        });

它响应并清除我所有的共享偏好变量。但是,当我使用菜单手动切换到登录活动时,我仍然会切换回确认活动。

即使我可以确认变量为空,也会发生这种情况。

我希望这对一些可以为我提供帮助的人产生影响。谢谢。

4

3 回答 3

2

这几乎不会是真的:

USERPREFERENCES.getString(USERPREFERENCES_USERMAIL, "")  == null

如果你改用这个怎么办?

if( USERPREFERENCES.getString(USERPREFERENCES_USERMAIL, null)  == null && USERPREFERENCES.getString(USERPREFERENCES_USERID, null) == null && USERPREFERENCES.getString(USERPREFERENCES_USERNAME, null) == null){
    //setContentView(R.layout.signin); TRY TO AVOID DOING THIS THING!!!!!
    Toast.makeText(SignIn.this, "testing...", Toast.LENGTH_LONG).show();
}else...

另外,作为建议...而不是在活动之间切换...如果您只创建一个 Signing.java 活动并将 aViewFlipper放入其布局中会怎样。这样,您的应用程序不仅会更快,而且更易于维护。

于 2011-05-30T14:58:50.333 回答
2

这是因为当您切换回 LoginActivity 时,这将被恢复而不是被创建,这意味着您在 OnCreate 中编写的登录代码将不会被调用,因为此时调用了 Overrider OnResume ,而不是 onCreate 。

因此,要么在 onResume 中再次编写此代码,要么在移动到第二个活动之前调用 finish(),以便下次它会调用 onCreate()

于 2011-05-30T15:09:50.843 回答
1

如果您导航回第一个活动,onCreate则不会再次调用 (除非活动因缺乏资源而被销毁)。将验证码移入onResume.

于 2011-05-30T14:58:58.680 回答