gpt4 book ai didi

java - 调用 Intent Activity 后如何修复应用程序崩溃

转载 作者:搜寻专家 更新时间:2023-10-30 20:47:38 25 4
gpt4 key购买 nike

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

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

这是家庭 Activity

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();
}
}

这是登录 Activity

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

为了可读性,我删减了一些代码

它应该将名称、硬币和 gem 以及数据库中的数据传递到 HomeActivity 中的变量中。但似乎我的代码使应用程序崩溃了


我还拍摄了 logcat Logcat snapshot from android device 的快照

最佳答案

我猜你在调用 onCreate 之前向 Activity 请求 getIntent

试试这个:

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

关于java - 调用 Intent Activity 后如何修复应用程序崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54146701/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com