2015-05-13 339 views
3

抱歉有關此錯誤的更多問題,但我讀過的所有內容對我來說都是無助的。改裝:預計BEGIN_OBJECT,但是BEGIN_ARRAY

我正在使用Retrofit庫和GSON來解析JSON答案。我得到這個錯誤:

E/RETROFIT ERROR﹕ com.google.gson.JsonSyntaxException: java.lang.IllegalStateException: Expected BEGIN_OBJECT but was BEGIN_ARRAY at line 1 column 2 path $ 

JSON答案:

[ 
    { 
"route_id": 16, 
"typeofmovement_name": "Type name", 
"route_description": "Just default description and no more", 
"route_name": "Default name", 
"route_img_url": "place reserved for url", 
"themes": [ 
    "Theme name one", 
    "Theme name two" 
], 
"routeparts": [ 
    { 
    "rp_id": 32, 
    "part_id": 1, 
    "rp_start_latitude": "59.935353200891576", 
    "rp_start_longitude": "30.31521778553724", 
    "rp_end_latitude": "59.93948523234933", 
    "rp_end_longitude": "30.314136184751987", 
    "rp_description": "Default Description", 
    "rp_title": "Default Title" 
    }, 
    { 
    "rp_id": 33, 
    "part_id": 2, 
    "rp_start_latitude": "59.93948523234933", 
    "rp_start_longitude": "30.314136184751987", 
    "rp_end_latitude": "59.940330654891774", 
    "rp_end_longitude": "30.328612737357613", 
    "rp_description": "Default Description", 
    "rp_title": "Default Title" 
    }, 
    { 
    "rp_id": 34, 
    "part_id": 3, 
    "rp_start_latitude": "59.940330654891774", 
    "rp_start_longitude": "30.328612737357613", 
    "rp_end_latitude": "59.934541749310746", 
    "rp_end_longitude": "30.33052649348974", 
    "rp_description": "Default Description", 
    "rp_title": "Default Title" 
    } 
] 
} 
] 

類,我使用的GSON解析

public class Route { 
@SerializedName("route_id") private int routeId; 
@SerializedName("typeofmovement_name") private String typeOfMove; 
@SerializedName("route_description") private String routeDescription; 
@SerializedName("route_name") private String routeTitle; 
@SerializedName("route_img_url") private String imgUrl; 
@SerializedName("themes") private String[] themes; 
private List<Routeparts> routeparts; 
Route() { 
    this.routeparts = new ArrayList<>(); 
} 

class Routeparts { 
    int rp_id; 
    int part_id; 
    String rp_start_latitude;  
    String rp_start_longitude; 
    String rp_end_latitude; 
    String rp_end_longitude; 
    String rp_description; 
    String rp_title; 
} 

有改造API

@GET("/routes/{route_id}") 
void getRouteInfo(@Path("route_id") String routeId, Callback<Route> callback); 

附:對不起,可能會出現語法錯誤。

+2

請顯示您正在閱讀的句子。看起來你試圖讀取一個對象,而JSON消息是一個列表。 – eduyayo

回答

7

你改造的服務應該是這樣的

@GET("/Routes") void getRoutes(Callback<List<Route>> routesCallback); 

,您的電話應該是這樣

RetrofitService.getRoutes(new Callback<List<Route>>() { 
    @Override public void success(List<Route> routes, Response response) { 
     //success   
    } 

    @Override public void failure(RetrofitError error) { 
     //error 
    } 
}); 

如果你真的希望一個單一的路線,你將不得不修改服務器代碼。

+0

非常感謝!那很簡單... – Alex

相關問題