Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/197.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
Java 登录android应用程序_Java_Android - Fatal编程技术网

Java 登录android应用程序

Java 登录android应用程序,java,android,Java,Android,我正在创建一个android应用程序,要求用户在启动主要活动后登录。因此,我将状态存储在应用程序中,并在登录活动中更新它 public class AppActivity extends Application { ........ public static boolean isLogged =false; ...... } 在main中,我检查状态,如果用户已登录,我将显示主活动,如果未登录,我将显示登录活动 protected void onCreate(Bund

我正在创建一个android应用程序,要求用户在启动主要活动后登录。因此,我将状态存储在应用程序中,并在登录活动中更新它

public class AppActivity extends Application {
    ........
    public static boolean isLogged =false;
    ......
}
在main中,我检查状态,如果用户已登录,我将显示主活动,如果未登录,我将显示登录活动

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

    if(!AppActivity.isLogged){
        Intent intent = new Intent(getApplicationContext(),LoginActivity.class);
        startActivity(intent);
    }
}
此外,如果用户已登录,我还会检查
onResume

从那里我更新了登录活动,如下所示

public class LoginActivity extends AppCompatActivity {
    btnLogin.setOnlickListener(){

        @Override
        public void onClick(View view) {
            AppActivity.isLogged = true;
            finish();
        }
    }
}

问题是,我必须登录两次,应用程序才能将我重定向到主活动

finish()
并不是通过
onCreate()
将您发送回活动,它只是将您返回到活动。但是,它将通过该活动的
onResume()
发送给您。如果您将登录签入放在Resume上而不是onCreate上,它将起作用。您还可以查看其他方法,但这是使用现有代码实现的最简单方法。

不要将状态保存在
static
变量中。使用持久性存储可能
SharedReference
。相应地读取和写入会话状态。@ADM,如果用户没有正确关闭应用程序,登录将被保存,并将在下次自动登录。写会话数据不是太多了吗,尤其是当它只被使用一次的时候?也许你也可以解释为什么它会更新持久性数据而不是内存中的数据。这完全取决于你的会话。每次用户打开应用程序时,你都想请求他/她登录。然后,你可以使用运行时全局状态,这可以由
应用程序
类完成。如果不是这样,则使用
SharePreference
。因此,请做出选择。
onCreate()
用于检查用户是否在第一次启动时登录。我还将登录检查放在了
onResume()
中。问题是您必须登录两次才能重定向。第一次它会根据您提出的问题和您对我答案的回答再次显示登录窗口,我认为堆栈溢出不是回答您问题的最佳地方。您应该对如何使用Android生命周期实现登录系统进行更多研究,并将SO用于特定的、可解决的问题,而不是广泛的“如何”问题。
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    if(!AppActivity.isLogged){
        Intent intent = new Intent(getApplicationContext(),LoginActivity.class);
        startActivity(intent);
    }
}