Bom dia pessoal.
Tenho um webservice em php que faz uma consulta ao banco de dados e retorna um JSON para o android consumir.
Quando tem algum campo no bd com espaço em branco, ele dá erro no android.
Quando todos os campos do bd estão sem espaço em branco, o android pega o json normal.
Alguém já se deparou com isso? Um amigo me falou que poderia ser quebra de linha do json, mas eu não acredito. De qualquer jeito, como retiraria as quebras de linha do json antes de retorná-lo ao android?
Obrigado.
não faz muito sentido isso, realmente. mostra um exemplo do json.
o que vc pode fazer é validar o mesmo com alguma ferramenta
Obrigado pela ajuda.
Seguinte, eu faço uma consulta no bd, pegandos os Estados.
Então eu gero um JSON, que é o seguinte:
{"estados":[{"id":"2","nome":"Minas Gerais"},{"id":"1","nome":"Rio de Janeiro"}]}
Ai quando o android pega esse JSON, ele dá erro. Agora se eu enviar o seguinte JSON:
{"estados":[{"id":"2","nome":"Minas_Gerais"},{"id":"1","nome":"Rio_de_Janeiro"}]}
Ai o android pega o json, usa e não da nenhum erro.
Entendeu? Não sei se consegui explicar exatamente o que está acontecendo.
Validei no site que vc me passou, ele retornou JSON Válido.
org.json.JSONException: Unterminated string at character 35 of {"estados":[{"id":"2","nome":"Minas
Dragoon
Outubro 27, 2016, 12:51pm
#7
Poste o código referente a esse erro !?
try
{
JSONObject json = new JSONObject(resposta);
JSONArray estadosJSONArray = json.getJSONArray("estados");
List<String> estadosArray = new ArrayList();
for (int i = 0; i < estadosJSONArray.length(); i++) {
JSONObject estado = estadosJSONArray.getJSONObject(i);
String nomeDoEstado = estado.getString("nome");
estadosArray.add(nomeDoEstado);
}
fragmentCom.populaSpinner(estadosArray);
}
catch (JSONException e)
{
e.printStackTrace();
Toast.makeText(fragmentCom.getContext(),
"Erro ao carregar spinner..", Toast.LENGTH_SHORT).show();
}
cara estados não parece ser um jsonArray e sim um jsonObject
Dragoon
Outubro 27, 2016, 1:09pm
#10
Eu fiz o teste assim e funcionou de primeira!:
String resposta = "{\"estados\":[{\"id\":\"2\",\"nome\":\"Minas Gerais\"},{\"id\":\"1\",\"nome\":\"Rio de Janeiro\"}]}";
JSONObject json = new JSONObject(resposta);
JSONArray estadosJSONArray = json.getJSONArray("estados");
List<String> estadosArray = new ArrayList();
for (int i = 0; i < estadosJSONArray.length(); i++) {
JSONObject estado = estadosJSONArray.getJSONObject(i);
String nomeDoEstado = estado.getString("nome");
estadosArray.add(nomeDoEstado);
System.out.println(nomeDoEstado);
}
Realmente, fiz o mesmo teste e funcionou.
O interessante que quando abro a página em php em meu navegador, ela me devolve a resposta:
{"estados":[{"id":"2","nome":"Minas Gerais"},{"id":"1","nome":"Rio de Janeiro"}]}
E a string de teste que dá certo é:
"{\"estados\":[{\"id\":\"2\",\"nome\":\"Minas Gerais\"},{\"id\":\"1\",\"nome\":\"Rio de Janeiro\"}]}"
Pelo que pude perceber, é a mesma coisa. Onde posso estar errando então?
Dragoon
Outubro 27, 2016, 1:26pm
#12
E o caracter de escape
por isso o meu funcionou e o seu não
Leia:
Desculpe Dragoon, não entendi.
Quando eu fiz o mesmo teste que você, utilizando a string para preencher meu spinner, ele funcionou.
Mas quando eu pego o json recebido, daí não funciona.
Também não entendi essa questão do caracter de escape.
Dragoon
Outubro 27, 2016, 1:54pm
#14
Quando você recebe ele vem dentro de uma String
?
Como você recupera me dá o exemplo de código faço o teste pra você?
Função que chama a conexão e recebe o JSON:
protected String doInBackground(Void... params) {
WebClientBuscaEstados client = new WebClientBuscaEstados();
String resposta = client.post();
return resposta;
}
E a classe WebClientBuscaEstados:
public class WebClientBuscaEstados {
public String post(){
String pagina = Constants.URL_SITE+ "/buscaEstados.php";
try{
URL url = new URL(pagina);
HttpURLConnection connection = (HttpURLConnection) url.openConnection();
connection.setRequestProperty("Content-type", "application/json");
connection.setRequestProperty("Accept", "application/json");
connection.setDoOutput(true);
PrintStream output = new PrintStream(connection.getOutputStream());
output.println();
connection.connect();
String jResposta = new Scanner(connection.getInputStream()).next();
return jResposta;
} catch (MalformedURLException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
return null;
}
}
Dragoon
Outubro 27, 2016, 2:09pm
#16
Dragoon
Outubro 27, 2016, 2:16pm
#17
java, string, escaping
Aqui tem um exemplos e os links referentes! @R_a_f_a_e_ll
Eu acessei tudo que vc mandou…
Não consegui…
Seria basicamente usar a biblioteca StringEscapeUtils e usar uma função para converter meu json retirando os caracteres de escape? Seria isso?
Dragoon
Outubro 27, 2016, 7:23pm
#19
Seguinte eu precisa receber esse json aqui no meu netbeans tem como! ?
Desculpa Dragoon, não entendi sua pergunta.