Получение NULL в теле ошибки ответа, если код состояния 400 с модификацией в Android - PullRequest
0 голосов
/ 16 октября 2018

Я работал над некоторым процессом входа в систему и застрял.Проблема заключалась в том, что при вводе неправильного пароля всегда выдается исключение NullPointerException, поскольку мой getMessage получал нулевой ответ от бэкэнда.После этого я изменил свой код состояния в узле с 400 на 200 (200 - который я использую для статуса успеха), а затем попытался выполнить ту же процедуру. После ввода неверного пароля на этот раз он дал мне ответ от узла.

Это означает, что моя модернизация не получает ответ для кода состояния 400, и когда он был изменен на 200, он работал хорошо, что было действительно странно.

Кто-нибудь знает, почему это происходит, если вы хотите, чтобы я опубликовал свойкод входа или узла я могу.

СПАСИБО!

РЕДАКТИРОВАТЬ

Это мой метод onResponse при входе в систему.

 public void onResponse(Call<ServerResponse> call, retrofit2.Response<ServerResponse> response) {

            ServerResponse resp = response.body();

            if (resp.getmessage().equals(Constants.SUCCESS))
            {
                Toast.makeText(Login.this, resp.getmessage(), Toast.LENGTH_SHORT).show();
                goToProfile();

        }
        else {
                Toast.makeText(Login.this, resp.getmessage(), Toast.LENGTH_SHORT).show();
            }

        }

и вот мой код узла, в настоящее время все коды состояния равны 200, но когда я использовал 400 для неправильного пароля и пользователь не нашел, он возвращает ноль.

const User= require("../model/user.model.js");
const { initSession} = require('../utils/utils');

const logins =  (req,res,next)=> {  
console.log("login user::"+JSON.stringify(req.body));
console.log("password:::"+req.body.user.password);  
 User.findOne({ username : req.body.user.username }, function(err, user) {
    if (!user) {           
          return res.status(200).send({
              message : "User not found."
          });
      }    
      else {    

        if (user.validPassword(req.body.user.password)) {   
            console.log("login successfully!!!");            
            return res.status(200).send({
                message : "success"
            });

        }        
    else if(!(user.validPassword(req.body.user.password))) {
        console.log("wrong password");
        return res.status(200).send({
            message : "Wrong Password"
        });
    }
}
  })
  }

module.exports = { logins };

1 Ответ

0 голосов
/ 16 октября 2018

Когда вы получаете сообщение об ошибке, модификация не анализирует его, а передает его как errorBody.

Таким образом, вам нужно проанализировать этот json: response.errorBody().string() для вашего ServerResponse объекта, а затем вы можете получить доступ к message свойство.

Редактировать:

Ваша функция ответа:

public void onResponse(Call<ServerResponse> call, retrofit2.Response<ServerResponse> response) {
    if(response.isSuccessful()) {
        ServerResponse serverResponse = response.body()
        if(serverResponse.getMessage().equals(Constants.SUCCESS)) {
            Toast.makeText(Login.this, response.body().getMessage()).show();
            goToProfile();
        } else {
            Toast.makeText(Login.this, serverResponse.getMessage(), Toast.LENGTH_SHORT).show();
        }
    } else {
        Gson gson = new Gson();
        ServerResponse errorResponse = gson.fromJson(response.errorBody().string(), ServerResponse.class);
        Toast.makeText(Login.this, errorResponse.getMessage(), Toast.LENGTH_SHORT).show();
    }
}
...