J2ME HttpConnection getResponseCode () blocchi in attesa di risposta dal server su Nokia N97
-
18-09-2019 - |
Domanda
aggiungo un file da un telefono Nokia N97 al server, tutto funziona bene, ma dopo file viene caricato Voglio ottenere risposta dal server. Il problema è che ottengo risposta solo dopo mezzo minuto o più. Da quello che vedo i blocchi di codice in httpConnection.getResponseCode () in attesa di risposta. Ho provato su un Sony Ericsson e ottengo risposta molto veloce quindi presumo sia un problema Nokia N97. (Non è un problema del server, perché funziona bene su altri telefoni)
Qualcuno sa il motivo per cui questo accade solo su Nokia?
Ecco un frammento di codice:
UploadFile pubblico () {
httpConn = (HttpsConnection) Connector.open(url, Connector.READ_WRITE);
...
//set httpConn parameters and request method
...
writeParametersAndFileName(os, "text/plain");
**writeFileToStream(os);**
os.write("\r\n".getBytes());
os.write("--".getBytes());
os.write(boundary.getBytes());
os.write("--".getBytes());
os.write("\r\n".getBytes());
*//here code blocks on Nokia N97. Same thing happens if I use os.flush() after
// I send chunks of the file*
.....
codeResp = httpConn.getResponseCode();
// check condition
checkResponseHeader();
}
pubblico writeFileToStream () {
InputStream is = null;
FileConnection c = null;
try
{
c = (FileConnection) Connector.open("file:///"+ sourcePath, Connector.READ);
if(c.exists()) {
is = c.openInputStream();
long fs = c.fileSize();
while (total < fs) {
byte[] data = new byte[512];
int readAmount = is.read(data,0,512);
total += readAmount;
os.write(data, 0, readAmount);
}
//os.flush();
}
catch (IOException ex) {
//
}
finally
{
//close connection
}
}
Soluzione
Hai solo pensate che il vostro file è stato caricato.
La chiamata a getResponseCode () è il primo che fa sì che il HttpConnection per collegare in realtà al server.
Non tornerà fino a quando non carica il file, che prende presumibilmente più di un minuto.
Questo è un comportamento perfettamente valido secondo le specifiche HttpConnection in JSR-118:
" I seguenti metodi causano la transizione allo stato collegato quando la connessione è in stato di installazione.
* openInputStream
* openDataInputStream
* getLength
* getType
* getEncoding
* getHeaderField
* getResponseCode
* getResponseMessage
* getHeaderFieldInt
* getHeaderFieldDate
* getExpiration
* getDate
* getLastModified
* getHeaderField
* getHeaderFieldKey
"
Mi aspetto che gli altri telefoni che avete provato questo su sono meno potenti rispetto alla N97 e la necessità di svuotare l'OutputStream, quindi la connessione al server prima che dovrebbero secondo la specifica.