Retorno de WebService com JSON

5 respostas
S

Bom dia pessoal!

Seguinte, eu tenho uma aplicação Android que se comunica com um web service, que por sua vez, retorna um JSON toda vez que é solicitado. Uma das APIs do WS retorna um JSON que tem como atributo os bytes de várias images. Na verdade, cada registro da tabela onde eu busco essas informções possui 2 imagens. Eu fiz uma chamada no WS que retornou apenas 2 registros do banco, ou seja 4 imagens. O JSON ficou enorme. O arquivo fica com mais ou menos 100 Kb. Isso porque foram só 2 registros. Mas em um cenário real pode ser que sejam 10, 20, 30, etc. E como é uma aplicação mobile ficaria pesado.

Alguém sabe alguma forma de melhorar esse retorno? Ou não tem muito o que fazer mesmo?

Desde já agradeço!

5 Respostas

G

Nunca retorne imagens via JSON, já que você somente vai transformar os bytes em texto, e isso vai gerar um tráfego enorme de rede mesmo.
Em vez de retornar a imagem, retorne o path para que a aplicação possa baixar ela via HTTP (se possível em background).

S

Entendi. Mas tipo, logo que o usuário acessa o aplicativo eu já mostro uma lista de registros e cada item possui uma imagem. Então eu teria que carregar todas as imagens antes para depois mostrar a tela para o usuário. Se eu tiver 30 registros eu vou ter que fazer 30 chamadas http para buscas as 30 imagens. Não ficaria lento?

[]'s

E

Particularmente eu retornaria uma lista com os elementos, por exemplo, uma aplicação que o usuário queira listar produtos por descrição ou algo do gênero, eu retornaria da seguinte forma:

{
    produto:[
        {
            desc:'descricao1',
            preco:10,
            imagem:'/imagem/imagem01.jpeg'
        },
        {
            desc:'descricao1',
            preco:10,
            imagem:'/imagem/imagem01.jpeg'
        },
        {
            desc:'descricao2',
            preco:10,
            imagem:'/imagem/imagem02.jpeg'
        },
        {
            desc:'descricao3',
            preco:10,
            imagem:'/imagem/imagem03.jpeg'
        }
    ]
}

Ou seja, você faria uma requisição única, com os registros depois baixaria as imagens.

G

Schoker:
Entendi. Mas tipo, logo que o usuário acessa o aplicativo eu já mostro uma lista de registros e cada item possui uma imagem. Então eu teria que carregar todas as imagens antes para depois mostrar a tela para o usuário. Se eu tiver 30 registros eu vou ter que fazer 30 chamadas http para buscas as 30 imagens. Não ficaria lento?

[]'s

Dependendo da situação, você poderia utilizar a boa e velha servet, onde você passaria um único parametro e receberia um stream contendo um arquivo ZIP com todas as imagens necessárias.
Se para você for importante mostrar todas as imagens de uma vez, talvez seja uma solução.

H
gustavo_apsilva:
Schoker:
Entendi. Mas tipo, logo que o usuário acessa o aplicativo eu já mostro uma lista de registros e cada item possui uma imagem. Então eu teria que carregar todas as imagens antes para depois mostrar a tela para o usuário. Se eu tiver 30 registros eu vou ter que fazer 30 chamadas http para buscas as 30 imagens. Não ficaria lento?

[]'s

Dependendo da situação, você poderia utilizar a boa e velha servet, onde você passaria um único parametro e receberia um stream contendo um arquivo ZIP com todas as imagens necessárias.
Se para você for importante mostrar todas as imagens de uma vez, talvez seja uma solução.


ederfreitas:
Particularmente eu retornaria uma lista com os elementos, por exemplo, uma aplicação que o usuário queira listar produtos por descrição ou algo do gênero, eu retornaria da seguinte forma:

{
    produto:[
        {
            desc:'descricao1',
            preco:10,
            imagem:'/imagem/imagem01.jpeg'
        },
        {
            desc:'descricao1',
            preco:10,
            imagem:'/imagem/imagem01.jpeg'
        },
        {
            desc:'descricao2',
            preco:10,
            imagem:'/imagem/imagem02.jpeg'
        },
        {
            desc:'descricao3',
            preco:10,
            imagem:'/imagem/imagem03.jpeg'
        }
    ]
}

Ou seja, você faria uma requisição única, com os registros depois baixaria as imagens.

Faça as duas soluções acima que você será feliz! =D

Criado 16 de novembro de 2012
Ultima resposta 16 de nov. de 2012
Respostas 5
Participantes 4