首页 > 解决方案 > 应用程序在第二次启动时崩溃,不会将密钥保留在内存中

问题描述

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,第一次运行应用程序时会这样做(没有禁用部分,因为我还不知道如何实现它)但是第二次打开应用程序并将“密钥”作为密码它会使应用程序崩溃,我没有将密钥存储在内存中......

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

标签: javaandroidandroid-studiomemory

解决方案


这是您可以遵循的非常基本的指南: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!");
                 }
             }
         });
    }

推荐阅读