Bom dia pessoal, estou com problemas para retornar e exibir uma lista de objetos de um webservice. No caso ao tentar retornar estes objetos meu código dispara a seguinte Exception:
java.lang.IllegalStateException: Expected BEGIN_OBJECT but was BEGIN_ARRAY at line 1 column 2 path $
A minha classe esta desta forma:
public class Documento implements Serializable {
private String Cd_Filial;
private String Cd_Cod_Doc;
private String Dt_Movimento;
private String Cd_Cod_Produto;
private String Cd_Localizacao;
private String Nr_Documento;
private String Qtd_Recebida;
private String Qtd_Aceita;
private String Qtd_Vendida;
private String Qtd_Perda;
private String Qtd_Devolver;
private String Qtd_Devolvida;
@Override
public String toString(){
return "Filial: " + getCd_Filial()
+ "\nCódigo: " + getCd_Cod_Doc()
+ "\nLocalização: " + getCd_Localizacao()
+ "\nData: " + getDt_Movimento();
}
}
E minha outra classe que faz a chamada do webservice esta desta forma:
public class HTTPCarregaLista extends AsyncTask<Void, Void, List<Documento>> {
private final String filial;
public HTTPCarregaLista(String filial) {
this.filial = filial;
}
@Override
protected List<Documento> doInBackground(Void... Void) {
List<Documento> docs = new ArrayList<Documento>();
StringBuilder resposta = new StringBuilder();
try {
URL url = new URL("http://www.acessoseg.com.br/webservicesalao/api/documento/" + this.filial);
HttpURLConnection connection = (HttpURLConnection) url.openConnection();
connection.setRequestMethod("GET");
connection.setRequestProperty("Content-type", "application/json");
connection.setRequestProperty("Accept", "application/json");
connection.setDoOutput(true);
connection.setConnectTimeout(5000);
connection.connect();
Scanner scanner = new Scanner(url.openStream());
while(scanner.hasNext()){
resposta.append(scanner.nextLine());
}
} catch (MalformedURLException e) {
e.printStackTrace();
} catch (ProtocolException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
return Collections.singletonList(new Gson().fromJson(resposta.toString(), Documento.class));
}
}
Adapter para classe Documento:
public class AdapterDocumento extends BaseAdapter {
private final List<Documento> documentoList;
private final Context context;
public AdapterDocumento(List<Documento> documentoList, Context context) {
this.documentoList = documentoList;
this.context = context;
}
@Override
public int getCount() {
return documentoList.size();
}
@Override
public Object getItem(int position) {
return documentoList.get(position);
}
@Override
public long getItemId(int position) {
return Long.parseLong(documentoList.get(position).getCd_Cod_Doc());
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
Documento documento = documentoList.get(position);
LayoutInflater inflater = LayoutInflater.from(context);
View view = convertView;
if (view == null) {
view = inflater.inflate(R.layout.list_item, parent, false);
}
TextView campofilial = (TextView) view.findViewById(R.id.item_filial);
campofilial.setText(documento.getCd_Filial());
TextView campodata = (TextView) view.findViewById(R.id.item_data);
campodata.setText(documento.getDt_Movimento());
TextView camponum = (TextView) view.findViewById(R.id.item_num);
camponum.setText(documento.getDt_Movimento());
TextView campoloc = (TextView) view.findViewById(R.id.item_loc);
campoloc.setText(documento.getCd_Localizacao());
return view;
}
}
Se alguém puder ajudar desde já agradeço, se precisar de outras informações eu coloco aqui sem problemas.
Obs: a classe Documento possui Get/Set para todos os seus atributos, só não coloquei aqui para não fica muita coisa.