Как решить эту ошибку Ожидаемый BEGIN_ARRAY, но был BEGIN_OBJECT в строке 1, столбце 2, пути $ - PullRequest
0 голосов
/ 20 апреля 2020

Я работаю над проектом с django бэкэндом restframework, я сделал бэкэнд и проверил, что он работает правильно, но теперь я хочу подключить мое приложение android к API, но именно в этот момент я хочу получить это резюме enter image description here после успешной регистрации и получить некоторые данные для использования в следующем упражнении, в котором я получаю сообщение об ошибке, хотя данные сохраняются в базе данных

Вот мой класс интерфейса APIClient

package com.example.covid_19_tracker.data.network;
import com.example.covid_19_tracker.data.network.model.AddLocationResponse;
import com.example.covid_19_tracker.data.network.model.LoginResponse;
import com.example.covid_19_tracker.data.network.model.RegisterDeviceResponse;
import com.example.covid_19_tracker.data.network.model.RegisterUserResponse;

import java.util.HashMap;

import io.reactivex.Observable;
import retrofit2.http.FieldMap;
import retrofit2.http.FormUrlEncoded;
import retrofit2.http.POST;

public interface ApiInterface {

    @FormUrlEncoded
    @POST("api/locations/")
    Observable<AddLocationResponse> addLocation(@FieldMap HashMap<String, Object> params);

    @FormUrlEncoded
    @POST("api/devices/")
    Observable<RegisterDeviceResponse> registerDevice(@FieldMap HashMap<String, Object>   params);

    @FormUrlEncoded
    @POST("api/accounts/register/")
    Observable<RegisterUserResponse> registerUser(@FieldMap HashMap<String, Object> params);

    @FormUrlEncoded
    @POST("api/accounts/login/")
    Observable<LoginResponse> loginUser(@FieldMap HashMap<String, Object> params);
}

А вот мой RegisterUserResponse. java Класс модели

package com.example.covid_19_tracker.data.network.model;

import com.google.gson.annotations.Expose;
import com.google.gson.annotations.SerializedName;

import java.util.ArrayList;

public class RegisterUserResponse {
    @SerializedName("success")
    @Expose
    private String success;
    @SerializedName("status_code")
    @Expose
    private Integer status_code;
    @SerializedName("message")
    @Expose
    private String message;
    @SerializedName("data")
    @Expose
    private ArrayList data = new ArrayList();
    @SerializedName("token")
    @Expose
    private String token;

    public RegisterUserResponse() {
    }

    public String getSuccess() {
        return success;
    }

    public void setSuccess(String success) {
        this.success = success;
    }

    public Integer getStatus_code() {
        return status_code;
    }

    public void setStatus_code(Integer status_code) {
        this.status_code = status_code;
    }

    public String getMessage() {
        return message;
    }

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

    public ArrayList getData() {
        return data;
    }

    public void setData(ArrayList data) {
        this.data = data;
    }

    public String getToken() {
        return token;
    }

    public void setToken(String token) {
        this.token = token;
    }
}

Но я получаю ошибка Ожидается BEGIN_ARRAY, но BEGIN_OBJECT в строке 1, пути 2, столбце 2 $ Я новичок в android. Спасибо

1 Ответ

1 голос
/ 21 апреля 2020

Ваше поле данных не является ArrayList, как вы указали в RegisterUserResponse классе

Вам необходимо создать класс Data, который будет содержать поля id username password .. .

и затем в вашем RegisterUserResponse классе вы объявите:

@SerializedName("data")
    @Expose
    private Data data;

вместо:

@SerializedName("data")
    @Expose
    private ArrayList data = new ArrayList();
...