Sto provando a effettuare una richiesta a un servizio Web da un'applicazione Android, utilizzando HttpUrlConnection. Ma a volte funziona, ea volte no.DataOutputSteam mi sta gettando un 'java.io.IOException: inaspettato fine del flusso'?
Quando provo l'invio di questo valore:
JSON valore
{"Calle":"Calle Pérez 105","DetalleDireccion":"","HoraPartida":"May 18, 2014 9:17:10 AM","Numero":0,"PuntoPartidaLat":18.477295994621315,"PuntoPartidaLon":-69.93638522922993,"Sector":"Main Sector"}
ho ricevuto una "fine inaspettata di flusso" Eccezione nella funzione di chiusura DataOutputStream.
Ecco il mio codice:
DataOutputStream printout;
// String json;
byte[] bytes;
DataInputStream input;
URL serverUrl = null;
try {
serverUrl = new URL(Config.APP_SERVER_URL + URL);
} catch (MalformedURLException e) {
...
}
bytes = json.getBytes();
try {
httpCon = (HttpURLConnection) serverUrl.openConnection();
httpCon.setDoOutput(true);
httpCon.setUseCaches(false);
httpCon.setFixedLengthStreamingMode(bytes.length);
httpCon.setRequestProperty("Authorization", tokenType + " "+ accessToken);
httpCon.setRequestMethod("POST");
httpCon.setRequestProperty("Content-Type", "application/json");
printout = new DataOutputStream(httpCon.getOutputStream());
printout.writeBytes(json);
printout.flush();
printout.close();
...
}
potrebbe non riguardare il problema: Se non si desidera utilizzare una * * DataOutputStream esempio. Questo è un formato binario, piuttosto proprietario. Il modo corretto consiste nel convertire la stringa JSON in una matrice di byte utilizzando la codifica UTF-8 e quindi scriverla direttamente nel flusso di output della connessione. – Codo
Un ulteriore problema nel codice è la conversione della stringa JSON in un array di byte utilizzando una codifica predefinita. Quindi si utilizza la lunghezza dell'array per impostare la lunghezza del contenuto. Tuttavia, si applica * DataOutputStream * in un modo in cui la stringa viene scritta in modalità ASCII (writeBytes non utilizza una codifica, ma ignora i bit alti). Quindi potresti avere una mancata corrispondenza tra la lunghezza del contenuto annunciata e quella effettiva. – Codo