天天看點

Bomb的使用者注冊:setOnClickListener()報錯#606 java.lang.NullPointerException

感謝在尋找答案時一部落客的總結:追究原因,一般報錯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的崩潰分析也指出了問題

Bomb的使用者注冊:setOnClickListener()報錯#606 java.lang.NullPointerException

順便推廣下一部落客對#606 java.lang.NullPointerException的總結,原出處https://blog.csdn.net/c_z_w/article/details/80844934

Bomb的使用者注冊:setOnClickListener()報錯#606 java.lang.NullPointerException