意图活动调用后如何修复应用程序崩溃

意图活动调用后如何修复应用程序崩溃

本文介绍了意图活动调用后如何修复应用程序崩溃的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我试图在用户按下注册按钮时从数据库(在LoginActivity.java上创建)传递一个变量,并将值传递给HomeActivity.java.在使用intent extras和bundle之前,代码可以正常工作(除了传递多变的).但是,在我输入新代码之后,按下注册按钮后,应用立即崩溃

I'm trying to pass a variable from database(created on LoginActivity.java) when user pressing register button and pass the value to HomeActivity.java .Before I use intent extras and bundle, the code works fine(except passing the variable). But after I put the new code, the app crash immediately after I press register button

我曾尝试搜索另一个可能的重复问题,但没有一个与我的问题相同.他们大多数人忘记将活动放在android清单中,但我已将LoginActivity放在android清单中.当然,我注意到编译时代码没有错误

Ive tried searching for another possible duplication question but none of them having the same problem as mine. Most of them forgot to put the activity in android manifest but I've put the LoginActivity on android manifest. And of course I've noticed there are no error on the code while compiling

这是家庭活动

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

And this is 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;
}

为了便于阅读,我删掉了一些代码

I have cut some of the codes for the sake of readability

它应该将名称,硬币和宝石,数据库中的数据传递到HomeActivity中的变量中,但是似乎我的代码使该应用程序崩溃了

It supposed to pass the name, coins, and gems, data from the database into the variable in HomeActivity.but it seems my code crash the app

我还快照了logcat

I've also snapshoted the logcat

推荐答案

我猜您在调用onCreate之前先向Activity索要 getIntent .

I guess you ask the Activity for getIntent before onCreate is called.

尝试一下:

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 ....
}

这篇关于意图活动调用后如何修复应用程序崩溃的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

08-13 01:13