Приложение вылетает при втором запуске, не держит ключ в памяти - PullRequest
1 голос
/ 14 января 2020
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, делает это в первый раз, когда вы запускаете приложение, (без части отключения, потому что я пока не знаю, как его реализовать), но во второй раз, когда я открываю приложение и помещаю «ключ» в качестве пароля, оно взломает sh приложение, я не храню ключ в памяти ...

Как я могу это исправить, не используя базу данных?

1 Ответ

0 голосов
/ 14 января 2020

Вот очень простое руководство c, которому вы можете следовать: 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!");
                 }
             }
         });
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...