预期为BEGIN_OBJECT,但已进行BEGIN_ARRAY改造

时间:2018-09-28 11:16:44

标签: java retrofit2

我正在尝试解析如下的JSON代码:

[
{
    "id": 1,
    "name": "Кафе 1",
    "tracks": [
           I think problem is here 
        {
            "id": 10,
            "name": "track 2.mp3",
            "url": "track 2.mp3",
       ...

这是我的ApiInterface.java

@GET(".../playlists")
Call<FDYPlaylists> getPlaylists(@HeaderMap Map<String, String> headers);

ApiUtils.java

public static final String BASE_URL = "url";

public static APIService getAPIService() {

    return RetrofitClient.getClient(BASE_URL).create(APIService.class);
}

您可以在我的RetrofitClient.java下面找到

 private static Retrofit retrofit = null;

public static Retrofit getClient(String baseUrl) {
    if (retrofit == null) {
        retrofit = new Retrofit.Builder()
                .baseUrl(baseUrl)
                .addConverterFactory(GsonConverterFactory.create())
                .build();
    }
    return retrofit;
}

呼叫如下:

 Map<String, String> map = new HashMap<>();
    map.put("Content-Type", "application/json");
    map.put("Authorization", "Bearer " + token);

    mAPIService.getPlaylists(map).enqueue(new Callback<FDYPlaylists>() {
       .....

这是我得到的错误:

  

预期为BEGIN_OBJECT,但在第1行第2列为BEGIN_ARRAY

2 个答案:

答案 0 :(得分:1)

方括号表示存在对象数组,因此请使用以下代码

@GET(".../playlists")
Call<ArrayList<FDYPlaylists>> getPlaylists(@HeaderMap Map<String, String> headers);

答案 1 :(得分:0)

该异常告诉您,您期望在根目录有一个对象,但实际数据实际上是一个数组。这意味着您需要将类型更改为数组。