感謝在尋找答案時一部落客的總結:追究原因,一般報錯Java.lang.nullpointerException ,都是某個對象沒有建立成功導緻
原出處https://blog.csdn.net/liwei405499/article/details/42709291
下面是我在我自己的解決問題的過程:
注冊的Activit代碼
public class RegisteredActivity extends BaseActivity implements View.OnClickListener{
private EditText et_user;
private EditText et_age;
private EditText et_desc;
private RadioGroup mRadioGroup;
private EditText et_pass;
private EditText et_password;
private EditText et_email;
private Button btn_registered;
private boolean isMale;
{
isMale = true;
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_register);
et_user = findViewById(R.id.et_user);
et_age = findViewById(R.id.et_age);
et_desc = findViewById(R.id.et_desc);
mRadioGroup = findViewById(R.id.mRadioGroup);
et_pass = findViewById(R.id.et_pass);
et_password = findViewById(R.id.et_password);
et_email = findViewById(R.id.et_email);
btn_registered = (Button) findViewById(R.id.btn_registered);
this.btn_registered = btn_registered;
/*
if (savedInstanceState == null) {
LogUtil.e( "error:空指針" );
}
else{
//初始化View
initView();
}
*/
initView();
}
private void initView() {
//調用btn_register的點選事件
btn_registered.setOnClickListener(this);
}
@Override
public void onClick(final View v) {
switch (v.getId()){
case R.id.btn_registered:
//擷取輸入值
String name = et_user.getText().toString().trim();
String age = et_age.getText().toString().trim();
String desc = et_desc.getText().toString().trim();
String pass = et_pass.getText().toString().trim();
String password = et_password.getText().toString().trim();
String email = et_email.getText().toString().trim();
//判斷輸入是否為空
if (!TextUtils.isEmpty(name)
& !TextUtils.isEmpty(age)
& !TextUtils.isEmpty(pass)
& !TextUtils.isEmpty(password)
& !TextUtils.isEmpty(email)){
//判斷兩次輸入的密碼是否一緻
if (pass.equals(password)){
//判斷性别
mRadioGroup.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(RadioGroup group, int checkedId) {
if(checkedId == R.id.rd_male){
isMale = true;
}else if (checkedId == R.id.rd_female){
isMale = false;
}
}
});
//判斷簡介是否為空
if (TextUtils.isEmpty(desc)){
desc = "這個人很懶,什麼都沒有留下?!";
}
//注冊
MyUser user = new MyUser();
user.setUsername(name);
user.setPassword(password);
user.setEmail(email);
user.setAge(Integer.parseInt(age));
user.setSex( isMale);
user.setDesc(desc);
user.signUp(new SaveListener<MyUser>() {
@Override
public void done(MyUser myUser, BmobException e) {
if (e == null) {
Snackbar.make(v, "注冊成功", Snackbar.LENGTH_LONG).show();
finish();
} else {
Snackbar.make(v, "注冊失敗:" + e.getMessage(), Snackbar.LENGTH_LONG).show();
}
}
});
}else {
Toast.makeText(this,"兩次密碼不一緻!",Toast.LENGTH_SHORT).show();
}
}else{
Toast.makeText(this,"請确認輸入有效!",Toast.LENGTH_SHORT).show();
}
break;
}
}
}
其中
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_register);
et_user = findViewById(R.id.et_user);
et_age = findViewById(R.id.et_age);
et_desc = findViewById(R.id.et_desc);
mRadioGroup = findViewById(R.id.mRadioGroup);
et_pass = findViewById(R.id.et_pass);
et_password = findViewById(R.id.et_password);
et_email = findViewById(R.id.et_email);
btn_registered = (Button) findViewById(R.id.btn_register); //出錯處
this.btn_registered = btn_registered;
其實就是btn_registered錯指向R.id.btn_register,而應該指向R.id.btn_registered。
而Bugly的崩潰分析也指出了問題
順便推廣下一部落客對#606 java.lang.NullPointerException的總結,原出處https://blog.csdn.net/c_z_w/article/details/80844934