Solucionado (ver solução)
Solucionado
(ver solução)
6
respostas

JSON com espaço

Não sei se está ligado com o método usado:

Scanner scanner = new Scanner(connection.getInputStream());
String resposta = scanner.next();

Mas se uso outra font que tem espaço no valor {"chave":"valor composto"} eu recebo esse erro:

org.json.JSONException: Unterminated string at character 17 of {"chave":"valor

Tem algo que possa fazer para tratar os espaços? Tem algum outro método para HTTP? Eu vi que o Apache foi descontinuado.

Eu vi que tem um chamado volley, é recomendado?

Muito obrigado!

6 respostas
solução!

O problema está no scanner.next() onde ele scaneia somente primeira palavra até o espaço, creio que scanner.nextLine() possa solucionar o problema.

Olá Danillo, obrigado pelo retorno! Vou verificar essa alteração.

Sobre o Volley, fiz uns testes e funcionou muito bem, para utilizar o volley sem perder o que já tinha sido feito no exercício, tive que usá-lo de forma síncrona, mas se quiser ele já dispensa o uso do AsyncTask.

Na realidade eu não sei como funciona o android por isso mesmo não comentei sobre o Volley.

Quanto a classe Scanner é usado também não só no android como no java que já me deu muito problema quanto a leitura de palavras, no caso para poder ler a linha completa é nextLine().

Caso tenha algum espaço antes ou depois da palavra você pode utilizar o '.trim()' assim remove os espaço entre o texto. Exemplo: ' Texto com espaço ' 'Texto com espaço' A remoção do trim é somente na extremidade e também pode utilizar o replace ou replaceAll que ajuda a remover espaço duplo no meio do texto para um único espaço.

O scanner via das vezes ele gera alguns bugs como por exemplo quando pede para ler um texto no caso do seu exemplo o next() lê somente uma palavra, não me lembro bem mas creio que quando usa nextInt() para converter o texto para int acaba por criar um bug na próxima leitura devido ao enter ficar como um valor para a próxima leitura ou até mesmo o next() faz tem este problema.

Existe também formas de criar delimitador onde o \n (enter) não é considerado.

O Volley é a biblioteca desenvolvida pelo pessoal do Google para lidar com requisições web e sua documentação é bem completa, podendo ser vista no próprio site do Android. Uma das grandes vantagens do Volley é substituir uma AsyncTask, e todo o código de controle, para fazer requisições web.

No entanto, em alguns testes de performance comparando Volley e Retrofit (uma lib com a mesma função do Volley), o Retrofit se mostrou mais rápido.

E ae Felipe, blz?

Vlw pela resposta. Essa outra lib é MUITO mais rápida ou está dentro da média? Qual delas vc recomenda para uma aplicação simples?

Dá uma lida no teste e veja o que acha para a sua aplicação.