2012-01-18 3 views
9

Ho una visualizzazione Web utilizzando la memorizzazione nella cache dell'applicazione. Ho lanciato l'app con una connessione alla rete per caricare/memorizzare la pagina. Ora, dopo aver spento il wifi (e 3g - nessuna connessione di rete) e avviato l'app, viene visualizzata la pagina "Android non può caricare la pagina". Stranamente, se poi ricarico la webview, carica la pagina dalla cache. Perché non carica questa pagina dalla cache se non riesce a connettersi alla rete?Perché Android Webview non verifica la cache per impostazione predefinita?

Sto utilizzando HTML5 Application Cache con cache.manifest. Ecco il mio codice WebView per abilitare questa:

webview.getSettings().setDomStorageEnabled(true); 
webview.getSettings().setAppCacheMaxSize(1024*1024*8); 
webview.getSettings().setAppCachePath("/data/data/com.my.package/cache"); 
webview.getSettings().setAllowFileAccess(true); 
webview.getSettings().setAppCacheEnabled(true); 

Ho provato ad aggiungere in:

weview.getSettings().setCacheMode(WebSettings.LOAD_CACHE_ELSE_NETWORK); 

ma non ha aiutato.

+0

Quando si disattiva il wifi e/o 3g, si sta ora eliminando l'istanza dell'applicazione, a meno che non si stia verificando attivamente, non saprà caricare dalla cache perché è già caricata dalla rete, questo è il motivo per cui quando si ricarica la webview si carica correttamente. –

+0

@JaredBurrows Non capisco cosa intendi, ma il flusso è questo: 1. Carica app dalla rete. 1 bis. La pagina è memorizzata nella cache. 2. Uccidi l'app. 3. Uccidere il wifi (senza 3g sul dispositivo) 4. Caricare l'app. 4a. La pagina mostra "Android non può caricare la pagina" 5. Aggiorna la visualizzazione web. 5a. La pagina viene caricata correttamente dalla cache – xdumaine

+0

Come si aggiorna la visualizzazione Web? –

risposta

0

Controlla se l'URL che stai richiedendo non è un reindirizzamento. Se lo è, la cache punterà anche a quel reindirizzamento e WebView non leggerà il reindirizzamento risultante dalla cache.

Mi ci è voluto un po 'di tempo per capire che questo era ciò che stava accadendo nel mio caso.