Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/svn/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android共享首选项条件活动切换_Android_Android Activity_Sharedpreferences_Switching - Fatal编程技术网

Android共享首选项条件活动切换

Android共享首选项条件活动切换,android,android-activity,sharedpreferences,switching,Android,Android Activity,Sharedpreferences,Switching,我有一个android应用程序,我用它在我的网站上注册用户。我的第一个任务是注册一个用户,如果我的共享首选项文件显示没有注册的用户信息 如果我的应用程序有注册用户,我将提供以下代码以简单自动地切换到“主页”活动: public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.signin);

我有一个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开始,应用程序将切换到已确认的活动,或者保持打开状态并显示signin活动

我的问题是,当系统工作并且我切换到确认活动时,我提供了一个注销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();
            }
        });
它响应并清除所有共享首选项变量。但是,当我使用菜单手动切换到登录活动时,我仍然会切换回已确认的活动

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


我希望这能给一些能给我提供帮助的人带来启发。谢谢。

这几乎不会是真的:

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活动并在其布局中放置一个
ViewFlipper
,会怎么样。这样,您的应用程序不仅速度更快,而且更易于维护。

这几乎是不可能的:

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活动并在其布局中放置一个
ViewFlipper
,会怎么样。这样,您的应用程序不仅速度更快,而且更易于维护。

如果导航回第一个活动,则不会再次调用
onCreate
(除非该活动因资源不足而被销毁)。在
onResume
中移动身份验证代码如果导航回第一个活动,则不会再次调用
onCreate
(除非该活动因资源不足而被销毁)。在恢复时移动身份验证代码这是因为当您切换回LoginActivity时,将恢复而不是创建身份验证代码,这意味着您在创建时写入的登录代码将不会被调用,因为此时间重写器onResume已被调用,而不是onCreate


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

这是因为当您切换回LoginActivity时,它将被恢复,而不是被创建,表示您在onCreate中编写的登录代码将不会被调用,因为此时间重写器OnResume已被调用,而不是onCreate


因此,在转到第二个活动之前,请在onResume中再次编写此代码或调用finish(),以便下次它将调用onCreate()

Huh,很好地抓住了“”!=无效的我想知道他最初是如何工作的。谢谢你们两位,尤其是克里斯蒂安。你的意见帮助我看到了我的严重错误。而且,我会非常感激地查看ViewFlipper!嗯,很好地捕捉到了“”!=无效的我想知道他最初是如何工作的。谢谢你们两位,尤其是克里斯蒂安。你的意见帮助我看到了我的严重错误。而且,我会非常感激地查看ViewFlipper!非常感谢。我需要更多的生命周期知识。再次感谢,谢谢。我需要更多的生命周期知识。再次感谢