sql >> Database teknologi >  >> RDS >> SQLite

Sådan cachelagres Parsed JSON til offlinebrug

Hvorfor ikke bare gemme det i cache-mappen i din app ved at bruge noget som dette:

String path =Environment.getExternalStorageDirectory() + File.separator + "cache" + File.separator;File dir =new File(path);if (!dir.exists()) { dir.mkdirs( );}sti +="data";Fildata =new File(path);if (!data.createNewFile()) { data.delete(); data.createNewFile();}ObjectOutputStream objectOutputStream =new ObjectOutputStream(new FileOutputStream(data));objectOutputStream.writeObject(actorsList);objectOutputStream.close(); 

Og derefter kan du læse den når som helst ved at bruge:

List list =null;Fildata =ny Fil(sti);try { if(data.exists()) { ObjectInputStream objectInputStream =new ObjectInputStream(new FileInputStream(data)); list =(Liste) objectInputStream.readObject(); objectInputStream.close(); }} catch (IOException e) { e.printStackTrace();} catch (ClassNotFoundException e) { e.printStackTrace();} 

OPDATERING: Okay, lav en klasse med navnet ObjectToFileUtil, indsæt denne kode i den oprettede klasse

pakke ;import android.os.Environment;import java.io.*;public class ObjectToFileUtil { public static String objectToFile(Object object) throws IOException { String path =Environment.getExternalStorageDirectory() + File .separator + "cache" + File.separator; Fil dir =ny Fil(sti); if (!dir.exists()) { dir.mkdirs(); } sti +="data"; Fildata =ny Fil(sti); if (!data.createNewFile()) { data.delete(); data.createNewFile(); } ObjectOutputStream objectOutputStream =new ObjectOutputStream(ny FileOutputStream(data)); objektOutputStream.writeObject(objekt); objectOutputStream.close(); returvej; } public static Object objectFromFile(String path) kaster IOException, ClassNotFoundException { Object object =null; Fildata =ny Fil(sti); if(data.exists()) { ObjectInputStream objectInputStream =new ObjectInputStream(new FileInputStream(data)); object =objectInputStream.readObject(); objectInputStream.close(); } returner objekt; }}

Skift til dit pakkenavn, og glem ikke at tilføje WRITE_EXTERNAL_STORAGE tilladelse til AndroidManifest.xml . I dit MainActivity-tilføj felt

privat streng datasti; 

og erstat din onPostExecute-metode for JSONAsyncTask-klassen til

beskyttet void onPostExecute(boolsk resultat) { dialog.cancel(); adapter.notifyDataSetChanged(); if(result) { prøv { dataPath =objectToFile(arrayList); } catch (IOException e) { e.printStackTrace(); } } else { Toast.makeText(getApplicationContext(), "Kan ikke hente data fra serveren", Toast.LENGTH_LONG).show(); }} 

Nu kan du få adgang til get actorsList fra File når som helst, når du vil, ved at bruge

try { actorsList =(ArrayList)objectFromFile(dataPath);} catch (IOException e) { e.printStackTrace();} catch (ClassNotFoundException e) { e.printStackTrace();} 

Hvis du vil gemme filstien efter lukning af programmet, skal du gemme dataPath-strengen (og indlæse ved programstart), for eksempel ved at bruge SharedPreferences.



  1. Hvordan angiver jeg en adgangskode til 'psql' ikke-interaktivt?

  2. Løsninger til INSERT OR UPDATE på SQL Server

  3. RYD SKÆRM - Oracle SQL Developer genvej?

  4. Maksimal størrelse for en SQL Server-forespørgsel? IN klausul? Er der en bedre tilgang