/ / uložiť všeobecný typ Zoznamu do SharedPreference - java, generické, android-sharedpreferences, android-gson

uložte generický typ zoznamu v systéme SharedPreference - java, generics, android-sharedpreferences, android-gson

Chcem vytvoriť všeobecnú metódu na ukladanie ľubovoľného typu súborov Zoznam zdieľaných preferencií.

public static List<T extends Object> readAnyTypeOfList<T>() {
Gson gson = new Gson();
return (gson.fromJson(SharedPref.read("anyTypeOfList", "[]"),
new TypeToken<List<T>>() {
}.getType()));
}

A na uloženie ľubovoľného typu zoznamu

public static void saveAnyTypeOfList(List<T> value) {
Gson gson = new GsonBuilder().create();
JsonArray jsonArray = gson.toJsonTree(value).getAsJsonArray();
SharedPref.save("anyTypeOfList", jsonArray.toString());
}

ale oba metdos daju chybu. aký je správny spôsob vytvorenia všeobecnej metódy. Snažil som sa tiež toto

kde je pracovný príklad

    public static ListOfModel = "ListKey"

public static List<ModelClass> readListOfModel() {
Gson gson = new Gson();
return (gson.fromJson(SharedPref.read(ListOfModel, "[]"),
new TypeToken<List<ModelClass>>() {
}.getType()));
}

public static void saveListOfModel(List<ModelClass> value) {
Gson gson = new GsonBuilder().create();
JsonArray jsonArray = gson.toJsonTree(value).getAsJsonArray();
SharedPref.save(ListOfModel, jsonArray.toString());
}

odpovede:

1 pre odpoveď č. 1

Nemôžete vytvoriť TypeToken tak všeobecne. T je vymazaný, informácie o konkrétnom type nie sú za behu k dispozícii, takže v tokene nebudú žiadne informácie.

Chybou, ktorú ste urobili vo vyhlásení všeobecných metód, je to, že ste nikdy nedeklarovali premennú typu T, Ako toto:

public static <T> someMethod(T t) {...}
//............^^^

(Syntax sa líši od C #)

Moja rada by bola urobiť toto:

public static <T> void saveAnyTypeOfList(String key, List<T> value) {
Gson gson = new GsonBuilder().create();
JsonArray jsonArray = gson.toJsonTree(value).getAsJsonArray();
SharedPref.save(key, jsonArray.toString());
}

public static <T> List<T> readAnyTypeOfList(String key, TypeToken<List<T>> tt) {
Gson gson = new Gson();
return (gson.fromJson(SharedPref.read(key, "[]"), tt.getType()));
}