Android应用程序在启动时会显示一个白色的空白屏幕

Android应用程序在启动时会显示一个白色的空白屏幕,android,sharedpreferences,Android,Sharedpreferences,我正在尝试实现一个简单的登录应用程序,其中用户详细信息(如用户名和密码)使用共享首选项硬编码到其中。 当我尝试启动应用程序时,它会显示一个空白的白色屏幕,并在我清除应用程序缓存时无限期地敬酒我的评论。 我该怎么修呢。 请帮帮我。!这是我的启动活动 public class MainActivity extends AppCompatActivity { BaseClass session; EditText userName; EditText passWord; Button logIn; @

我正在尝试实现一个简单的登录应用程序,其中用户详细信息(如用户名和密码)使用共享首选项硬编码到其中。 当我尝试启动应用程序时,它会显示一个空白的白色屏幕,并在我清除应用程序缓存时无限期地敬酒我的评论。 我该怎么修呢。 请帮帮我。!这是我的启动活动

public class MainActivity extends AppCompatActivity {
BaseClass session;
EditText userName;
EditText passWord;
Button logIn;
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    //  SharedPreferences pref = PreferenceManager.getDefaultSharedPreferences(this);
   session = new BaseClass(getBaseContext());
        // <---- run your one time code here
        //  BaseClass.getApp();
        userName = (EditText) findViewById(R.id.etusername);
        passWord = (EditText) findViewById(R.id.etpassword);
        logIn = (Button) findViewById(R.id.btnlogin);
    //toasting line
        Toast.makeText(getBaseContext(),"User Login Status: "+session.isUserLoggedIn(),Toast.LENGTH_LONG).show();
    session.checkLogin();
        logIn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                String user = userName.getText().toString().trim();
                String pass = passWord.getText().toString().trim();
                String userVal = session.pref.getString(KEY_USERNAME, "username");
                String passVal = session.pref.getString(KEY_PASSWORD, "password");
                //  userName.setText(userVal);
                // passWord.setText(passVal);
                Toast.makeText(getBaseContext(), "Editfield value:" + user, Toast.LENGTH_LONG).show();
                Toast.makeText(getBaseContext(), "Actual username:" + userVal, Toast.LENGTH_LONG).show();
                if (user.equals(userVal) && pass.equals(passVal)) {
                    session.createUserLoginSession(userVal,
                            passVal);
                    Intent intent = new Intent(MainActivity.this, QRScanning.class);
                    intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
                    intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK);
                    intent.addFlags(Intent.FLAG_ACTIVITY_NO_ANIMATION);
                    startActivity(intent);

                } else {
                    Toast.makeText(getApplicationContext(), "Wrong Credentials", Toast.LENGTH_SHORT).show();
                    userName.setText("");
                    passWord.setText("");
                }
            }
        });
    }
}

}您将进入一个循环

当您从
MainActivity
中的
onCreate
方法调用
session.checkLogin()
时,由于用户未登录,您将再次启动
MainActivity
,然后再次显示Toast,再次调用
session.chechLogin()
,依此类推

您应该尝试修复代码流

希望这有帮助

更新

尝试以这种方式修复:

更改
checkLogin
方法如下:

public boolean checkLogin() {
    // Check login status
    return(this.isUserLoggedIn());
}
然后,在
main活动中执行以下操作:

public class MainActivity extends AppCompatActivity {
    BaseClass session;
    EditText userName;
    EditText passWord;
    Button logIn;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        session = new BaseClass(getBaseContext());
        if (session.checkLogin()) {
            Intent intent = new Intent(MainActivity.this, QRScanning.class);
            startActivity(intent);
            finish();
        }

        setContentView(R.layout.activity_main);

        // <---- run your one time code here
        //  BaseClass.getApp();
        userName = (EditText) findViewById(R.id.etusername);
        passWord = (EditText) findViewById(R.id.etpassword);
        logIn = (Button) findViewById(R.id.btnlogin);
        //toasting line
        Toast.makeText(getBaseContext(),"User Login Status: "+session.isUserLoggedIn(),Toast.LENGTH_LONG).show();

        logIn.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View view) {
                 // YOUR CODE TO HANDLE LOGIN HERE
            } 

        });
    }
}
public类MainActivity扩展了AppCompatActivity{
基类会议;
编辑文本用户名;
编辑文本密码;
按钮登录;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
会话=新基类(getBaseContext());
if(session.checkLogin()){
意向意向=新意向(MainActivity.this,qrscan.class);
星触觉(意向);
完成();
}
setContentView(R.layout.activity_main);

//您将进入一个循环

当您从
MainActivity
中的
onCreate
方法调用
session.checkLogin()
时,由于用户未登录,您将再次启动
MainActivity
,然后再次显示Toast,再次调用
session.chechLogin()
,依此类推

您应该尝试修复代码流

希望这有帮助

更新

尝试以这种方式修复:

更改
checkLogin
方法如下:

public boolean checkLogin() {
    // Check login status
    return(this.isUserLoggedIn());
}
然后,在
main活动中执行以下操作:

public class MainActivity extends AppCompatActivity {
    BaseClass session;
    EditText userName;
    EditText passWord;
    Button logIn;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        session = new BaseClass(getBaseContext());
        if (session.checkLogin()) {
            Intent intent = new Intent(MainActivity.this, QRScanning.class);
            startActivity(intent);
            finish();
        }

        setContentView(R.layout.activity_main);

        // <---- run your one time code here
        //  BaseClass.getApp();
        userName = (EditText) findViewById(R.id.etusername);
        passWord = (EditText) findViewById(R.id.etpassword);
        logIn = (Button) findViewById(R.id.btnlogin);
        //toasting line
        Toast.makeText(getBaseContext(),"User Login Status: "+session.isUserLoggedIn(),Toast.LENGTH_LONG).show();

        logIn.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View view) {
                 // YOUR CODE TO HANDLE LOGIN HERE
            } 

        });
    }
}
public类MainActivity扩展了AppCompatActivity{
基类会议;
编辑文本用户名;
编辑文本密码;
按钮登录;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
会话=新基类(getBaseContext());
if(session.checkLogin()){
意向意向=新意向(MainActivity.this,qrscan.class);
星触觉(意向);
完成();
}
setContentView(R.layout.activity_main);

//你不应该手动创建应用程序实例,这是框架责任。我相信这是主要问题。你不应该手动创建应用程序实例,这是框架责任。我相信这是主要问题。我应该如何解决它?我是android的初学者,请帮助我!我会创建一个完成以下任务的LoginActivityng:检查用户是否已登录。如果是,则启动MainActivity和finish()LoginActivity。否则,向用户显示执行登录的布局(EditText或其他内容)。在这种情况下,必须将LoginActivity设置为AndroidManifest.xml中的启动程序活动为什么要使用finish()!我通常使用finish来阻止用户单击“上一步”按钮,并返回到登录活动(在本例中为MainActivity)即使他已经登录。请不要说这不起作用,而事实上它正在起作用。我应该如何修复它?我是android的初学者,请帮助我!我会创建一个LoginActivity,它执行以下操作:检查用户是否登录。如果是,则启动MainActivity并完成()LoginActivity。否则,向用户显示执行登录的布局(EditText或其他内容)。在这种情况下,必须将LoginActivity设置为AndroidManifest.xml中的启动程序活动。为什么要使用finish()!我通常使用finish来阻止用户单击后退按钮,然后返回登录活动(在本例中为MainActivity)即使他已经登录。请不要在实际工作时说这不工作。