Tecnologia do Blogger.
RSS

Re: [androidbrasil-dev] JsonArray

Cara,

Não saco muito da parte WS em Java (então é tudo chute daqui para frente), mas uma coisa me pareceu estranha.
O parametro de seu WS é uma lista de lista de produtos (List<List<Produtos>>), enquanto seu JSON é um objeto com um array de lista de produtos.

A classe que se adequaria a seu JSON é mais ou menos a seguinte: 

public ListaProdutos {
   List<Produto> lista;
}
E então no WS:
 List<Produtos> ComparaLista(ListaProdutos lista)

O que você pode fazer para evitar essa redudânica é enviar direto o array (JSONArray) ao invés do objeto (JSONObject).

É melhor usar GSON. 

Em 14 de junho de 2015 23:30, Alex Artur Hummes <alexhummes@gmail.com> escreveu:
Galera, preciso de mais uma ajudinha aqui. Estou precisando montar um JsonArray, pois preciso passar uma lista com todos os produtos escolhidos pelo usuário.
Andei lendo sobre esta funcionalidade e creio que montei certo o json como segue abaixo:

                   JSONObject json = new JSONObject();
JSONArray jArray = new JSONArray();
HashMap<String, String> hm = null;
int TamLista = arrayList.size();

                   for(int i=0;i<TamLista;i++){
  JSONObject aux =  new JSONObject();
      hm = arrayList.get(i);
      aux.put("prod_codbar",hm.get(TAG_CODBAR));
      aux.put("prod_desc", hm.get(TAG_PRODUTO));
      aux.put("prod_marca", hm.get(TAG_MARCA));
      aux.put("prod_marca",hm.get(TAG_MARCA));
      aux.put("prod_tipo",hm.get(TAG_TIPO));
      aux.put("prod_un",hm.get(TAG_UNIDADE));
      jArray.put(aux);
     } 
 json.put("Lista",jArray);

O arquivo json fica da seguinte forma:

{"Lista":[{"prod_codbar":"7896504305078","prod_desc":"LEITE LONGA VIDA 1L","prod_marca":"SANTA CLARA","prod_tipo":"","prod_un":"L"},{"prod_codbar":"7891042103070","prod_desc":"MARGARINA DORIANA 500G C\/SAL","prod_marca":"SEARA","prod_tipo":"","prod_un":"UN"}]}

A dúvida que tenho é de como tratar este no webservice WCF, tentei o seguinte, mas sem sucesso.

IService
[OperationContract]
        [WebInvoke(UriTemplate = "JsonComparaLista",
                    RequestFormat = WebMessageFormat.Json,
                    ResponseFormat = WebMessageFormat.Json, Method = "POST")]
        List<Produtos> ComparaLista(List<List<Produtos>> lista);

Service.svc
public List<BUS.Produtos> ComparaLista(List<List<Produtos>> lista)
        {
            return ProdutosBus.ComparaLista(lista);
        }

ProdutosBus
        public static List<Produtos> ComparaLista (List<List<Produtos>> lista)
        {
            List<Produtos> result = new List<Produtos>();
            Produtos produto = new Produtos();
            for (int i = 0; i < lista.Count; i++)
            {
                List<Produtos> listprod = lista[i];
                for (int n = 0; n < listprod.Count; n++)
                    produto.prod_desc = listprod[n].prod_desc;
                    result.Add(produto);               
            }

            return result;
        }
Obs.: Este result é apenas um teste que estava fazendo, pois como podem ver estou apenas retornando o mesmo item da lista que recebi.

Para Conhecimento segue também a classe Produtos, apenas para ver que uso os mesmo nomes dos campos na hora de montar o json
    public class Produtos
    {
        [DataMember]
        public string prod_codbar { get; set; }

        [DataMember]
        public string prod_desc { get; set; }

        [DataMember]
        public string prod_marca { get; set; }

        [DataMember]
        public string prod_un { get; set; }

        [DataMember]
        public string prod_tipo { get; set; }

        public Produtos(string prod_codbar, string prod_desc, string prod_marca, string prod_un, string prod_tipo)
        {
            this.prod_codbar = prod_codbar;
            this.prod_desc = prod_desc;
            this.prod_marca = prod_marca;
            this.prod_un = prod_un;
            this.prod_tipo = prod_tipo;
        }

        public Produtos()
        {
            this.prod_codbar = String.Empty;
            this.prod_desc = String.Empty;
            this.prod_marca = String.Empty;
            this.prod_un = String.Empty;
            this.prod_tipo = String.Empty;
        }
 
Galera eu também ainda não consegui depurar no visual studio, estou colocando para depurar e no celular estou colocando na minha app o IP do servidor e a porta que o depurador me informou mas fica eternamente esperando a ação, não debuga.
Então se conseguirem identificar o meu erro agradeço muito. Mais uma vez obrigado.

--
You received this message because you are subscribed to the Google Groups "Android Brasil - Dev" group.
To unsubscribe from this group and stop receiving emails from it, send an email to androidbrasil-dev+unsubscribe@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

--
You received this message because you are subscribed to the Google Groups "Android Brasil - Dev" group.
To unsubscribe from this group and stop receiving emails from it, send an email to androidbrasil-dev+unsubscribe@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

  • Digg
  • Del.icio.us
  • StumbleUpon
  • Reddit
  • RSS

0 comentários:

Postar um comentário