应用在第二次启动时崩溃,不会将密钥保留在内存中


public String SavedPassword;
@Override
protected void onCreate (Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_log_in);
Button btn1 = (Button) findViewById(R.id.btn1);
btn1.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Random rnd = new Random();
int n = 1000 + rnd.nextInt(9000);
String str = "";
str = Integer.toString(n);
SavedPassword = str;
String pass = str.toString();
TextView tv1 = (TextView) findViewById(R.id.tv1);
tv1.setText(pass);
Button btn2 = (Button) findViewById(R.id.btn2);
}
});
Button btn2  = (Button) findViewById(R.id.btn2);
btn2.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
String pass = SavedPassword;
TextView tv2 = (TextView) findViewById(R.id.tv2);
EditText edt = (EditText) findViewById(R.id.edt);
String passc = edt.getText().toString();
if (pass.equals(passc)) {
Intent intent = new Intent(getApplicationContext(), Photos.class);
startActivity(intent);
} else {
tv2.setText("TRY AGAIN!");
}
}
});
}

所以,我希望第一个button btn1制作一个密钥并存储它,之后我希望按钮被禁用,button 2 (btn2)应该是 LogIn,它应该比较密钥是否与您输入的密码相等EditText如果是这样,应该将您发送到照片.class,第一次运行应用程序时会这样做, (没有禁用部分,因为我还不知道如何实现它(但是第二次打开应用程序并将"密钥"作为密码时,它会使应用程序崩溃,我没有将密钥存储在内存中...

如何在不使用数据库的情况下解决此问题?

这是一个非常基本的指南,你可以遵循: https://www.journaldev.com/9412/android-shared-preferences-example-tutorial

我认为我在下面添加了一些代码应该对您有所帮助。 您必须仔细检查语法是否都很好,我没有在任何地方运行它。

基本上,我首先检查共享首选项,以查看您是否保存了任何密码。 如果你不这样做,我会禁用第二个按钮。 如果您这样做,我将启用第二个按钮。 此外,保存密码被设置为该值。

public String SavedPassword;
@Override
protected void onCreate (Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_log_in);
Button btn1 = (Button) findViewById(R.id.btn1);
SharedPreferences pref = getApplicationContext().getSharedPreferences("MyPref", 0); // 0 - for private mode
Editor editor = pref.edit();
SavedPassword = pref.getString("stored_password", null); // getting String
if(SavedPassword == null) {
btn2.setEnabled(false);
} else {
bt2.setEnabled(true);
}

btn1.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Random rnd = new Random();
int n = 1000 + rnd.nextInt(9000);
String str = "";
str = Integer.toString(n);
SavedPassword = str;
editor.putString("stored_password", SavedPassword).commit(); // Storing string
String pass = str.toString();
TextView tv1 = (TextView) findViewById(R.id.tv1);
tv1.setText(pass);
Button btn2 = (Button) findViewById(R.id.btn2);
}
});
Button btn2  = (Button) findViewById(R.id.btn2);
btn2.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
String pass = SavedPassword;
TextView tv2 = (TextView) findViewById(R.id.tv2);
EditText edt = (EditText) findViewById(R.id.edt);
String passc = edt.getText().toString();
if (pass.equals(passc)) {
Intent intent = new Intent(getApplicationContext(), Photos.class);
startActivity(intent);
} else {
tv2.setText("TRY AGAIN!");
}
}
});
}

最新更新