sql >> Databáze >  >> RDS >> SQLite

Jak uložit analyzovaný JSON do mezipaměti pro použití offline

Proč to prostě neuložit do složky mezipaměti vaší aplikace pomocí něčeho takového:

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

A poté si jej můžete kdykoli přečíst pomocí:

List<?> list = null;
File data = new File(path);
try {
    if(data.exists()) {
        ObjectInputStream objectInputStream = new ObjectInputStream(new FileInputStream(data));
        list = (List<Object>) objectInputStream.readObject();
        objectInputStream.close();
    }
} catch (IOException e) {
    e.printStackTrace();
} catch (ClassNotFoundException e) {
    e.printStackTrace();
}

AKTUALIZACE: Dobře, vytvořte třídu s názvem ObjectToFileUtil, vložte tento kód do vytvořené třídy

package <yourpackagehere>;

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;
        File dir = new File(path);
        if (!dir.exists()) {
            dir.mkdirs();
        }
        path += "data";
        File data = new File(path);
        if (!data.createNewFile()) {
            data.delete();
            data.createNewFile();
        }
        ObjectOutputStream objectOutputStream = new ObjectOutputStream(new FileOutputStream(data));
        objectOutputStream.writeObject(object);
        objectOutputStream.close();
        return path;
    }

    public static Object objectFromFile(String path) throws IOException, ClassNotFoundException {
        Object object = null;
        File data = new File(path);
        if(data.exists()) {
            ObjectInputStream objectInputStream = new ObjectInputStream(new FileInputStream(data));
            object = objectInputStream.readObject();
            objectInputStream.close();
        }
        return object;
    }
}

Změňte na název svého balíčku a nezapomeňte přidat WRITE_EXTERNAL_STORAGE oprávnění k AndroidManifest.xml . V poli Přidat MainActivity

private String dataPath;

a nahraďte svou metodu onPostExecute třídy JSONAsyncTask na

protected void onPostExecute(Boolean result) {
    dialog.cancel();
    adapter.notifyDataSetChanged();
    if(result) {
        try {
            dataPath = objectToFile(arrayList);
        } catch (IOException e) {
            e.printStackTrace();
        }
    } else {
        Toast.makeText(getApplicationContext(), "Unable to fetch data from server", Toast.LENGTH_LONG).show();
    }
}

Nyní můžete získat přístup k seznamu herců ze souboru, kdykoli chcete, pomocí

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

Pokud chcete po ukončení aplikace uložit cestu k souboru, musíte uložit řetězec dataPath (a načíst při spuštění aplikace), například pomocí SharedPreferences.



  1. Jak převést výsledek dotazu SQL na datovou strukturu PANDAS?

  2. Duplikování tabulky, indexů a dat MySQL

  3. Přicházejí nové funkce Microsoft Access!

  4. Jak získat počet řádků v tabulce MySQL pomocí PHP?