Bom dia Pessoal. Estou com problemas para entender o retrofit e gostaria de uma ajuda de vocês para entender o que está ocorrendo. Construi um WCF em C# que está me dando o seguinte retorno
D/OkHttp: {"retornoPalavra":[{"id":"111111111111111111111111111111111111","nivelDificuldade":1,"palavraIngles":"Hello","palavraPortugues":"Olá"}]}
porém ele não consegue deserializar.. dá o seguinte erro:
E/onFailure chamado: Unrecognized field "retornoPalavra" (class com.ericmiranda.mynotes.dto.PalavraSync), not marked as ignorable (one known property: "palavras"])
at [Source: okhttp3.ResponseBody$BomAwareReader@c646b8b; line: 1, column: 14] (through reference chain: com.ericmiranda.mynotes.dto.PalavraSync["retornoPalavra"])
Minha estrutura está da seguinte forma: Classe Palavra
public class Palavra implements Serializable {
private String id;
private String palavraPortugues;
private String palavraIngles;
private int nivelDificuldade;
public String getId() {
return id;
}
public void setId(String Id) {
this.id = Id;
}
public String getPalavraPortugues() {
return palavraPortugues;
}
public void setPalavraPortugues(String palavraPortugues) {
this.palavraPortugues = palavraPortugues;
}
public String getPalavraIngles() {
return palavraIngles;
}
public void setPalavraIngles(String palavraIngles) {
this.palavraIngles = palavraIngles;
}
public int getNivelDificuldade() {
return nivelDificuldade;
}
public void setNivelDificuldade(int nivelDificuldade) {
this.nivelDificuldade = nivelDificuldade;
}
@Override
public String toString() {
return getPalavraIngles();
}
}
Classe PalavraSync
public class PalavraSync {
private List<Palavra> retornoPalavra;
public List<Palavra> getPalavras (){return retornoPalavra;}
}
Minha interface está da seguinte forma (estou utilizando o método RetornarListaPalavraArray)
public interface MyNotesService {
@POST("InserirPalavra")
Call<Void>InserirPalavra(@Body Palavra palavra);
@GET("RetornarListaPalavraArray")
Call<PalavraSync>listaPalavraArray();
}
O fragmento de código onde faço a chamada retrofit
//region Iniciando a chamada dos dados do servidor
Call<PalavraSync> call = new RetrofitInicializador().getMyNotesService().listaPalavraArray();
call.enqueue(new Callback<PalavraSync>() {
@Override
public void onResponse(Call<PalavraSync> call, Response<PalavraSync> response) {
PalavraSync lista = response.body();
NotesDAO dao = new NotesDAO(getContext());
dao.sincronizaPalavra(lista.getPalavras());
dao.close();
carregaLista();
swipeListaPalavras.setRefreshing(false);
}
@Override
public void onFailure(Call<PalavraSync> call, Throwable t) {
Log.e("onFailure chamado", t.getMessage());
swipeListaPalavras.setRefreshing(false);
}
});
//endregion
Por fim o fragmento de código onde tento ler o retorno
public void sincronizaPalavra(List<Palavra> listaPalavras){
String x = "valor";
for (Palavra itemPalavra:
listaPalavras) {
if (palavraIsCadastrada(itemPalavra)){
alteraPalavra(itemPalavra);
}else {
inserePalavra(itemPalavra);
}
}
}
OBS: Se ao invés de colocar o retono
{"retornoPalavra":[{"id":"111111111111111111111111111111111111","nivelDificuldade":1,"palavraIngles":"Hello","palavraPortugues":"Olá"}]}
colocar desta forma
{"palavras":[{"id":"111111111111111111111111111111111111","nivelDificuldade":1,"palavraIngles":"Hello","palavraPortugues":"Olá"}]}
ele funciona.. agora não consegui entender a relação.