Ошибка при вставке из textbox.getText () в мою модель в Android

Я использую retrofit2 в Android.

Я создаю UserModel и AuthModel и вызываю метод из своей активности на сервер;

UserModel.class

public class UserModel {
    public  String  fullName;
    public String about;
    public String userName;
    public String password;
    public Date createDate;
    public Date lastSeen;
    public String phonenumber; 
    ...
}

AothModel.class

public class AuthModel {
    public UserModel user;
    public TokenModel token;
    public ErrorResponseModel errorResponse;
    ...
}

И моя деятельность

    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_singup);

        edtPhone = (EditText)findViewById(R.id.edtphone);
        AuthModel authModel = new AuthModel();
        authModel.user.phonenumber = edtPhone.getText().toString();
        Toast.makeText(SingUpActivity.this,authModel.user.phonenumber,
              Toast.LENGTH_SHORT).show();

Я устанавливаю текст в переменной модели UserModel.phonenumber и тестирую его. Ошибка:

Attempt to write to field 'java.lang.String com.mychat.models.UserModel.phonenumber' on a null object reference

authModel.user имеет значение null. Создайте его экземпляр, написав authModel.user = new UserModel (); а затем присвойте номер телефона

May Rest in Peace 08.01.2019 23:11
0
1
49
2

Ответы 2

Ошибка возникает из-за того, что вы не создали экземпляр UserModel в AuthModel. Вы инициализировали AuthModel, но он не создает экземпляр UserModel автоматически. Вот почему он выдает исключение NullPointerException всякий раз, когда вы пытаетесь получить доступ к каким-либо свойствам в UserModel, потому что это просто null.

Измените свой код следующим образом:

protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_singup);
        edtPhone=(EditText)findViewById(R.id.edtphone);
        AuthModel authModel=new AuthModel();
        UserModel userModel = new UserModel();
        authModel.setUserModel(userModel);
        authModel.user.phonenumber = edtPhone.getText().toString();
        Toast.makeText(SingUpActivity.this,authModel.user.phonenumber, Toast.LENGTH_SHORT).show();

или вы можете просто создать конструктор в AuthModel, который принимает новую UserModel в качестве аргумента.

Вы не инициализировали переменную user модели AuthModel

Итак, user - это null, и он дает ошибку

'java.lang.String com.mychat.models.UserModel.phonenumber' on a null object reference

Измените свой код и инициализируйте переменную user для authModel

AuthModel authModel = new AuthModel();
UserModel userModel = new UserModel();
authModel.user = userModel;
authModel.user.phonenumber = edtPhone.getText().toString();

Другие вопросы по теме