当用户按下注册按钮并将值传递给HomeActivity.java时,我试图从数据库(在LoginActivity.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();
}
}
这就是后勤活动
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中的变量中。但我的代码似乎使应用程序崩溃了
我猜在调用onCreate之前,您会要求活动执行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 ....
}
logcat:
对于某些活动的意图是有效的,对于某些特定的活动意图是崩溃的,我已经改变并尝试了不同的方法,但是对于某些活动意图是无效的,应用程序正在构建,但是在手机上运行之后,它在调试期间没有显示出任何错误?我尝试了不同的方法,但它仍然崩溃,谁能帮助我解决它? MainActivity java 清单文件
经过一些调试,我找到了这行代码 导致我的应用程序崩溃,我已经尝试过了 ; 但结果还是一样,有什么帮助吗??
我正在登录页面上工作,基于Androidhive教程和问题是在2布局下工作正常,但对于3布局应用程序将崩溃。 在androidhive教程中使用了2布局,但我想使用3,因为我收到短信然后otp然后注册,所以问题是3rd布局,它不会出现并崩溃。 Androidhive教程链接:第1部分第2部分 以下是代码: XML Java Logcat 08-29 10:48:12.426 4499-4499/i
一调用方法,我的计时器应用程序就崩溃了,它显示的对象引用为空,尽管我做得正确,但我找不到问题。请,某人,看看下面的代码:(我也附上logcat) 原因:java.lang.NullPointerException:尝试对空对象引用调用虚拟方法“void android.os.CountDownTimer.Cancel()”