Как исправить сбои приложения после вызываемой активности - PullRequest
0 голосов
/ 11 января 2019

Я пытаюсь передать переменную из базы данных (созданной на LoginActivity.java), когда пользователь нажимает кнопку регистрации, и передать значение в HomeActivity.java. Перед тем, как использовать намеренные дополнения и связку, код работает нормально (кроме передачи переменная). Но после того, как я поставил новый код, приложение вылетает сразу после нажатия кнопки регистрации

Я пытался найти еще один возможный вопрос дублирования, но ни у одного из них не было такой же проблемы, как у меня. Большинство из них забыли поместить активность в манифест Android, но я поставил функцию LoginActivity в манифест Android. И, конечно, я заметил, что в коде нет ошибок при компиляции

Это домашняя деятельность

DatabaseHelper myDb;

Intent i = getIntent();

Bundle extras = i.getExtras();

String pname = extras.getString("P_NAME");
int pcoins = extras.getInt("P_COINS");
int pgems = extras.getInt("P_GEMS");

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    // Set fullscreen and no title//////////
    getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);
    this.requestWindowFeature(Window.FEATURE_NO_TITLE);

    ////////////////////////////////////

    setContentView(R.layout.main_screen);

    goProfileBtn = (Button) findViewById(R.id.profilebutton);
    shopButton = (Button) findViewById(R.id.shopbutton);
    goBarrackBtn = (Button) findViewById(R.id.barrackbutton);
    goDungeonBtn = (Button) findViewById(R.id.dungeonbutton);
    goFarmBtn = (Button) findViewById(R.id.farmbutton);
    saveBtn = (Button) findViewById(R.id.savebutton);

    NameTxt = (TextView) findViewById(R.id.playerName);
    CoinTxt = (TextView) findViewById(R.id.cointxt);
    GemTxt = (TextView) findViewById(R.id.gemtxt);

    myDb = new DatabaseHelper(this);

    ///////////////////////////////

    NameTxt.setText(pname);
    CoinTxt.setText("Coin: " + pcoins);
    GemTxt.setText("Gem: " + pgems);

    ///////// Button ///////////////////

    goProfileBtn.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            Intent profileSwitch = new Intent(getApplicationContext(), ProfileActivity.class);
            startActivity(profileSwitch);
        }
    });

    goFarmBtn.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            Intent farmSwitch = new Intent(getApplicationContext(), FarmActivity.class);
            startActivity(farmSwitch);
        }
    });

    shopButton.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {

            Intent shopSwitch = new Intent(getApplicationContext(), startGame.class);
            startActivity(shopSwitch);
        }
    });

    goBarrackBtn.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {

            Intent barrackSwitch = new Intent(getApplicationContext(), startBarrack.class);
            startActivity(barrackSwitch);
        }
    });

    goDungeonBtn.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {

            Intent dungeonSwitch = new Intent(getApplicationContext(), dungeonActivity.class);
            startActivity(dungeonSwitch);
        }
    });
}

@Override
public void onBackPressed() {

    final AlertDialog.Builder builder = new AlertDialog.Builder(HomeActivity.this);
    builder.setMessage("EXIT GAME");
    builder.setCancelable(true);
    builder.setNegativeButton("NOT NOW",new DialogInterface.OnClickListener() {
        @Override
        public void onClick(DialogInterface dialogInterface, int i) {
            dialogInterface.cancel();
        }
    });
    builder.setPositiveButton("YES",new DialogInterface.OnClickListener() {
        @Override
        public void onClick(DialogInterface dialogInterface, int i) {
            finish();
        }
    });

    AlertDialog alertdialog = builder.create();
    alertdialog.show();
}
    }

А это LoginActivity

EditText edit1;
EditText edit2;
EditText edit3;

Button registerBtn;
Button loginBtn;

DatabaseHelper myDb;

User player1;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    //Set fullscreen and no title//////////
    getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);
    this.requestWindowFeature(Window.FEATURE_NO_TITLE);

    ///////////////////////////////////////
    setContentView(R.layout.login_screen);

    edit1 = (EditText)findViewById(R.id.editpname);
    edit2 = (EditText)findViewById(R.id.editpemail);
    edit3 = (EditText)findViewById(R.id.editppw);

    registerBtn = (Button)findViewById(R.id.registerbtn);
    loginBtn = (Button)findViewById(R.id.loginbtn);

    myDb = new DatabaseHelper(this);

    loginBtn.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            if (validate()) {
                String Email = edit2.getText().toString();
                String Password = edit3.getText().toString();
                User currentUser = myDb.Authenticate(new User(null, null, Email, Password));

                if (currentUser != null) {
                    System.out.println("Successfull");

                    Intent intent = new Intent(getApplicationContext(),HomeActivity.class);
                    startActivity(intent);
                    finish();
                } else {
                    System.out.println("Unsuccessfull");
                }
            }
        }
    });

    registerBtn.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            if (validate()) {
                String UserName = edit1.getText().toString();
                String Email = edit2.getText().toString();
                String Password = edit3.getText().toString();

                if (!myDb.isEmailExists(Email)) {
                    player1 = new User(null, UserName, Email, Password);
                    myDb.addUser(player1);
                    Intent i = new Intent(getApplicationContext(), HomeActivity.class);
                    Bundle extras = new Bundle();
                    extras.putString("P_NAME", player1.getName());
                    extras.putInt("P_COINS", player1.getCoins());
                    extras.putInt("P_GEMS", player1.getGems());
                    i.putExtras(extras);
                    startActivity(i);
                }
            } 
        }
    });
}

public boolean validate() {
    boolean valid = false;
    String Email = edit2.getText().toString();
    String Password = edit3.getText().toString();

    if (!android.util.Patterns.EMAIL_ADDRESS.matcher(Email).matches()) {
        valid = false;
        edit2.setError("Please enter valid email!");
    } else {
        valid = true;
        edit2.setError(null);
    }

    if (Password.isEmpty()) {
        valid = false;
        edit3.setError("Please enter valid password!");
    } else {
        if (Password.length() > 5) {
            valid = true;
            edit3.setError(null);
        } else {
            valid = false;
            edit3.setError("Password is to short!");
        }
    } 
    return valid;
}

Я сократил некоторые коды для удобства чтения

Предполагалось передать имя, монеты и драгоценные камни, данные из базы данных в переменную в HomeActivity. Но, похоже, мой код приводит к сбою приложения


Я также сделал снимок журнала Logcat snapshot from android device

1 Ответ

0 голосов
/ 11 января 2019

Я полагаю, вы запрашиваете у Activity значение getIntent перед вызовом onCreate.

Попробуйте это:

Intent i;
Bundle extras;

String pname; 
int pcoins;
int pgems; 

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    i = getIntent();
    extras = i.getExtras();

    pname = extras.getString("P_NAME");
    pcoins = extras.getInt("P_COINS");
    pgems = extras.getInt("P_GEMS");

    // follow with your onCreate code ....
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...