2013-03-01 12 views
5

Ho un ListView che contiene un grande insieme di dati.
Alla prima volta, carico tutti i dati da un servizio Web.Come implementare la memorizzazione nella cache di ListView in Android

Ora voglio memorizzare nella cache quei dati in modo che, se devo aprire di nuovo quella pagina, posso recuperare i dati dalla cache invece di interrogare nuovamente il servizio web.

Come faccio ?.

+0

qualsiasi codice di esempio per questo? – jithu

risposta

11

Suppongo si stanno memorizzando i dati recuperati da WebService in un oggetto serializzabile

È possibile memorizzare gli oggetti serializzabili in un file e caricarli in seguito (come avete dichiarato nella tua domanda prima di essere modificato.):

Store:

FileOutputStream fileOutputStream = yourContext.openFileOutput(fileName, Context.MODE_PRIVATE); 
ObjectOutputStream objectOutputStream = new ObjectOutputStream(fileOutputStream); 
objectOutputStream.writeObject(yourObject); 
objectOutputStream.close(); 

carico:

FileInputStream fileInputStream = yourContext.openFileInput(fileName); 
ObjectInputStream objectInputStream = new ObjectInputStream(fileInputStream); 
Object yourObject = (Object)objectInputStream.readObject(); 
objectInputStream.close(); 
+0

ArrayList follower; in questo FollowerInfo è una classe serializzabile e io uso i follower arraylist per aggiungere dati alla lista.Penso di aver bisogno di memorizzare o mettere in cache questo arraylist. Come posso fare questo ?. – jithu

+0

'ArrayLists' sono serializzabili di default, dato che' FollowerInfo' è serializzabile, non dovresti avere problemi a memorizzare/caricare l'intero 'ArrayList'. – fardjad

+0

Come posso applicare questo nel tuo codice? Indica dove metto il mio elenco di array? ObjectOutputStream.writeObject (followers); e su load yourobject è type file, quindi voglio farlo di nuovo come arraylist? – jithu

0

È possibile eseguire questa operazione salvando i dati tracciati tramite il servizio Web in un database SQLite, strutturato di conseguenza. Se si desidera ottenere dati più recenti rispetto all'ultimo record nel database, è necessario salvare un valore chiave nel file SharedPreferences. Esempio:

Vorrei ottenere tutti gli eventi del calendario da un servizio Web,

Oggi l'utente solo accede gli eventi di gennaio dall'evento n. 1 all'evento n. 10 (per la prima volta, questi vengono ottenuti tramite il servizio Web, memorizzati localmente nel Database SQLite e quindi visualizzati con l'uso di un cursore).

Domani, una volta che l'utente carica l'applicazione, i dati recuperati verranno caricati dal Database SQLite ('la cache') e l'utente riceverà solo eventi che sono più recenti di 10 attraverso il servizio web; e ripetere il processo del giorno precedente (cioè memorizzare le entrate recuperate nel DB SQLite e quindi visualizzarle tutte da 1 a 'x').

In questo caso si memorizzano gli eventi da 1 a 10 nel database e si memorizza "11" nelle preferenze condivise in modo da conoscere il punto di partenza per il successivo lotto di entità da ottenere. Spero di essere riuscito a guidarti.

Date un'occhiata alle opzioni di archiviazione disponibile su Android: http://developer.android.com/guide/topics/data/data-storage.html

Tutto il meglio :)

0

tuo caso è come quella:

How to cache listview data in android?

Dovete decidere se userai un database SQL se vuoi mantenere le informazioni più a lungo della vita dell'app, altrimenti un adattatore andrà bene.

Nelle demo Api fornite nel pacchetto Samples for SDK, esistono diversi esempi di List che utilizzano ListAdapters. Ad esempio, List5.java.

+0

posso inserire l'arraylist in sql lite? senza cambiarlo in stringa. – jithu

+0

Puoi fornire la risposta dettagliata a questa domanda? –