java - 应用程序在第二次启动时崩溃,不会将密钥保留在内存中
问题描述
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)
应该是登录按钮,它应该比较密钥是否与您输入的密码相同EditText
,如果是,应该将您发送到 Photos.class,第一次运行应用程序时会这样做(没有禁用部分,因为我还不知道如何实现它)但是第二次打开应用程序并将“密钥”作为密码它会使应用程序崩溃,我没有将密钥存储在内存中......
如何在不使用数据库的情况下解决此问题?
解决方案
这是您可以遵循的非常基本的指南:https ://www.journaldev.com/9412/android-shared-preferences-example-tutorial
我在下面添加了一些代码,我认为应该对您有所帮助。您必须仔细检查语法是否都很好,我没有在任何地方运行它。
基本上我先检查共享首选项,看看你是否保存了任何密码。如果你不这样做,我会禁用第二个按钮。如果你这样做,我启用第二个按钮。SavedPassword 也被设置为该值。
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!");
}
}
});
}
推荐阅读
- twig - 通过核心扩展更改 number_format 过滤器的默认值
- sql - SQL Server:如何将行转换为列
- r - R中的四分位变异系数
- java - Mockito 和 JUnit5 依赖测试问题
- ios - 升级到 v0.64.2 时反应原生 iOS 构建问题
- python - 我应该如何实现计算整个预测的 tf.keras.Metric?
- python - 运行 Jupyter 笔记本时在 Anaconda 环境中查找依赖项时出错
- docker - Dockerize 一个需要打印的 ASP.Net 服务
- java - 如何测量 Websphere 应用程序和数据库之间的延迟?
- php - 警告:oci_connect(): ORA-01017: 无效的用户名/密码;第 15 行 /applicationname/module/UC/src/UC/Service/Base/Oracle.php 中的登录被拒绝