risposta asincrono http per la risposta di grandi dimensioni
-
27-10-2019 - |
Domanda
ho familiarità con Android HttpURLConnection e Apache HttpConnection classi e il loro modo di lavorare (sono tutti sincrono, ma posso vivere con questo).
Ho una grande risposta con molte righe di dati comming dal server. E 'una risposta JSON e posso visualizzare i dati parzialmente prima di tutto analizzato la risposta. Alcuni parser JSON permettono che (come xcers permette di xml). Fare i callback e metodi relativi alle due classi di cui sopra lo permettono? Quando ottengo la risposta da HttpURLConnection sul flusso di input di apertura e leggo, faccio ad aprire il flusso quando tutti i dati sono già lì? O posso aprirlo e leggerlo e più che seguire?
Inoltre, non v'è alcun metodo HTTP su Android che funziona con NIO?
Soluzione
Con HttpClient, quando si apre il flusso di risposta in questo modo:
HttpGet request = new HttpGet();
request.setURI(new URI(url));
HttpResponse response = client.execute(request);
HttpEntity entity = response.getEntity();
InputStream stream = entity.getContent();
e cominciare a leggere, in realtà si avvia il download e si ottiene nuovi byte non appena questi vengono ricevuti. Non aspettare di tutto per ottenere scaricato per iniziare la lettura.
Per quanto ne so il HttpClient che viene fornito in bundle con Android non si basa su NIO. Non so di qualsiasi alternativa che lo fa.
Altri suggerimenti
In aggiunta a tutte le possibili soluzioni in commento di Ladlestein, c'è la semplice risposta di avvolgere tutto ciò che in un AsyncTask
. Ecco un progetto di esempio che dimostra facendo un HTTP request
utilizzando HttpClient
in un AsyncTask
.