Oczekiwano BEGIN_ARRAY, ale BEGIN_OBJECT z tablicą trzech elementów
Opracowuję aplikację Android 3.1 i nowszą.
Używam Spring Framework 1.0.0.0RC1 dla Androida i Google GSon 2.1.
Dostaję błąd, gdy próbuję parsować JSON.
To jestJSON wrócił przez„http://192.168.1.128/RestServiceImpl.svc/forms/”.
<code>{ "allFormsResult": [ { "FormId": 1, "FormName": "Formulario 1" }, { "FormId": 2, "FormName": "Formulario 2" }, { "FormId": 3, "FormName": "Formulario 3" } ] } </code>
Tutaj robię wszystko:
<code>public class FormSpringController { public static List<Form> LoadAll() { HttpHeaders requestHeaders = new HttpHeaders(); requestHeaders.setAccept(Collections.singletonList(new MediaType("application","json"))); HttpEntity<?> requestEntity = new HttpEntity<Object>(requestHeaders); String url = "http://192.168.1.128/RestServiceImpl.svc/forms/"; GsonHttpMessageConverter messageConverter = new GsonHttpMessageConverter(); List<HttpMessageConverter<?>> messageConverters = new ArrayList<HttpMessageConverter<?>>(); messageConverters.add(messageConverter); RestTemplate restTemplate = new RestTemplate(); restTemplate.setMessageConverters(messageConverters); ResponseEntity<Form[]> responseEntity = restTemplate.exchange(url, HttpMethod.GET, requestEntity, Form[].class); Form[] result= responseEntity.getBody(); return Arrays.asList(result); } } </code>
Gdy próbuję go przeanalizować, pojawia się następujący błąd:
<code>W/System.err(519): Caused by: java.lang.IllegalStateException: Expected BEGIN_ARRAY but was BEGIN_OBJECT at line 1 column 2 </code>
Czy wiesz, jak mogę to naprawić?
AKTUALIZACJA
@hotveryspicy zasugerował mi, że jest problem z JSON. W ten sposób generuję odpowiedź JSON (kod C #):
<code>public class RestServiceImpl : IRestServiceImpl { public List<FormContract> allForms() { List<FormContract> list = null; using (var vAdmEntities = new ADMDatabase.ADMEntities()) { list = new List<FormContract>(); foreach (var form in vAdmEntities.Form) { FormContract formC = new FormContract { FormName = form.name.Trim(), FormId = form.formId }; list.Add(formC); } } return list; } } </code>