Retrofit2 Android: ожидается строка, но BEGIN_OBJECT в строке 1, столбце 12, путь $ .result - PullRequest
0 голосов
/ 15 ноября 2018

Хотя я видел много решений этой проблемы, я не нашел точного ответа на свою проблему.Я получаю это исключение: java.lang.IllegalStateException: Expected BEGIN_ARRAY but was BEGIN_OBJECT at line 1 column 12 path $ Я не знаю, как решить эту проблему.

Все, что я хочу сделать, это отправить uuid пользователя и дату установки приложения и получить номер пользователя.

Интерфейс:

public interface UserIdApi {

String Url = "http://--.---.-.---:---- /"; // I hide URL

@FormUrlEncoded
@POST("api/add/user")
Call<UserIdData> postUserData (@FieldMap HashMap<String, String> param);
}

Код клиента:

Retrofit retrofit = new Retrofit.Builder()
            .baseUrl(UserIdApi.Url)
            .addConverterFactory(GsonConverterFactory.create())
            .build();

    UserIdApi userIdApi = retrofit.create(UserIdApi.class);

    HashMap<String, String> input = new HashMap<>();
    input.put("uuid", userDeviceID );  // DeviceID Like 2f4d2d4c...
    input.put("date", installDateString); // installDate Like 2018-11-13

    userIdApi.postUserData(input).enqueue(new Callback<UserIdData>() {
        @Override
        public void onResponse(  Call<UserIdData> call,   Response<UserIdData> response) {        
            if(response.isSuccessful())
            {
                int responseCode = response.code();
                Log.d("Code", responseCode+"");
                UserIdData uuid = response.body();                      
            }
            else
            {
                Log.e("Not Success", "");
            }
        }
        @Override
        public void onFailure(Call<UserIdData> call, Throwable t) {
            Log.e("Failure",t.getMessage());
        }
    });

Мой класс UserIdData:

public class UserIdData {


@SerializedName("result")
@Expose
public String result;
@SerializedName("data")
@Expose
public List<Datum> data = null;

public UserIdData () {
}

public UserIdData (String result, List<Datum> data) {
    super();
    this.result = result;
    this.data = data;
}

public String getResult() {
    return result;
}

public void setResult(String result) {
    this.result = result;
}

public List<Datum> getData() {
    return data;
}

public void setData(List<Datum> data) {
    this.data = data;
}

public class Datum {

    @SerializedName("userid")
    @Expose
    public Integer userid;

    public Datum() {
    }

    public Datum(Integer userid) {
        super();
        this.userid = userid;
    }

    public Integer getUserid() {
        return userid;
    }

    public void setUserid(Integer userid) {
        this.userid = userid;
    }

 }
}

PostMan:

{
"result": "success",
"data": [
    {
        "userid": 105
    }
  ]
}

Если я очиститьСписок в классе UserIdData, я получил 200 response.code, и я также проверил с почтальоном.Но я все еще не могу получить userid.И также я убедился, что в результате получен «успех», но идентификатор пользователя остается нулевым.Я думаю, что у меня проблема с моим классом UserIdData, но я точно не знаю, в чем проблема .. Как я могу решить эту проблему ..

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...