NullPointerException при выполнении почтового запроса с использованием RetroFit2 - PullRequest
0 голосов
/ 15 октября 2018

У меня есть служба, которая получает параметры и возвращает JSON в ответ.Ответ json такой, как указано ниже

{
    "status": 0,
    "message": "You are successfully registered",
    "user": [
        {
            "name": "Rajiv",
            "dob": "10/12/1988",
            "gender": 1,
            "qualification": "1",
            "streams": "1",
            "contactno": "3423234333",
            "email": "rajiv88@gmail.com",
            "password": "testpass",
            "api_key": "29b9522d1bd23161db5aba89933a6015",
            "profilepic": "NA",
            "phverified": 0,
            "emverified": 0,
            "active": 0
        }
    ]
}

Я написал интерфейс, как указано ниже:

@FormUrlEncoded
@POST("v20/register")
Call<RegisterResponse> insertUser(
        @Field("name_of_user") String name,
        @Field("dob") String dob,
        @Field("gender") int gender,
        @Field("qualification") String qualification,
        @Field("streams") String streams,
        @Field("contactno") String contactno,
        @Field("email") String email,
        @Field("password") String password);

Класс ответа регистра указан ниже

import java.util.List;
import com.google.gson.annotations.Expose;
import com.google.gson.annotations.SerializedName;
import com.sbs.data.User;

public class RegisterResponse {

    @SerializedName("status")
    @Expose
    private Integer status;
    @SerializedName("message")
    @Expose
    private String message;
    @SerializedName("user")
    @Expose
    private List<User> user = null;

    public Integer getStatus() {
        return status;
    }

    public void setStatus(Integer status) {
        this.status = status;
    }

    public String getMessage() {
        return message;
    }

    public void setMessage(String message) {
        this.message = message;
    }

    public List<User> getUser() {
        return user;
    }

    public void setUser(List<User> user) {
        this.user = user;
    }

}

Я вызвал сервисную функцию следующим образом:

Call<RegisterResponse> call=jobApiService.insertUser(edName.getText().toString(),
                edDob.getText().toString(),
                spnGender.getSelectedItemPosition()+1,
                categoryIDString, subCategoryIDString, txtPhone.getText().toString(), edmail.getText().toString(),
                edpass.getText().toString());
        call.enqueue(new Callback<RegisterResponse>() {
            @Override
            public void onResponse(Call<RegisterResponse> call, Response<RegisterResponse> response) {

                Log.d("hj", "Number of users received: " + response.body().getMessage());

            }
            @Override
            public void onFailure(Call<RegisterResponse> call, Throwable throwable) {
                Log.d("hj", "Error");

            }
        });

Но я получаю

NullPointerException

Когда этот отчет

Log.d ("hj", "Numberиз полученных пользователей: "+ response.body (). getMessage ());

выполняется.

Может кто-нибудь предложить решение

Ответы [ 3 ]

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

Попробуйте удалить инициализатор null для пользователя List.

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

Мы отправили данные в таком виде

Тип кузова -> Необработанные вот так для этого типа мы отправили данные в модель

@POST("user")
fun userInsert(@Body userModel: UserRequestModel): Observable<Response>

{
  "email": "abcd@abcd.com",
  "password": "123123"
}

Тип кузова-> x-www-form-urlencoded вот так

@POST("user")
 fun userInsert(@Body userHm:  HashMap<String,String>): Observable<Response>

 Hasmap <String, String> hm =new Hasmap<>()
 hm.put("Key", value)

Тип кузова -> form-data этот тип требуется для составных частей

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

Проверьте, получаете ли вы ответ от удаленного сервера.если его значение равно null, проверьте ваш API отдельно, используя почтальон или любой другой инструмент.Если это работает, проверьте код запроса.

public void onResponse(Call<RegisterResponse> call, Response<RegisterResponse> response) {

    if(resonse.body != null && !TextUtils.isEmpty(response.body().getMessage())){
        Log.d("hj", "Number of users received: " + response.body().getMessage());
    } else {
        Log.d("hj", "response received is null, but why??");
    }

}
...