Cześć, piszę apkę i jedna z jej funkcji to pobranie informacji i zainstalowanych aplikacjach na telefonie.
Umieszczam sobie ją w liście (ArrayList) a siedzą w niej obiekty.
I chciał bym dać sobie możliwość zapisania tych obiektów, odczytania zawartości i ponowne ich wyświetlenie. Odczyt dokonanie zmiany, zapis i po ponownym uruchomieniu apki znowu najpierw odczyt.
Listę obiektów konwertuję do jsona, i to mi zapisuje. Ale przy uruchomieniu apki i startowym odczytaniu apka się wywala.
apps = loadData(); // TUTAJ SIE WYWALA, jednak chodzi o wnętrze funkcji
if(apps == null)
{
Toast.makeText(this,"Empty",Toast.LENGTH_LONG).show();
apps = new ArrayList<>();
}
else
{
Toast.makeText(this,"NIEEmpty",Toast.LENGTH_LONG).show();
//listAppView.setAdapter(new AppAdapter(SetingsActivity.this,apps));
}
teraz co się dzieje w loadData():
private ArrayList<AppInfo> loadData()
{
SharedPreferences sharedPreferences = getSharedPreferences(getString(R.string.sheredApps),MODE_PRIVATE);
Gson gson = new Gson();
String json = sharedPreferences.getString(getString(R.string.sheredAppsKeyList),"");
Type type = new TypeToken<List<AppInfo>>() {}.getType();
//Log.i("JSON: ",json);
ArrayList<AppInfo> list = gson.fromJson(json, type); // TUTAJ SIĘ WYWALA
return list;
}
Teraz co się znajduje w AppInfo. Bo w obiekcie AppInfo mam też inny obiekt ApplicationInfo, ta klasa jest tymczasowa. Będzie się rozrastać:
public class AppInfo {
public ApplicationInfo info;
public String label;
public AppInfo(ApplicationInfo info, String label)
{
this.info = info;
this.label = label;
}
}
Funkcja zapisująca zapisuje tak:
private void saveData()
{
SharedPreferences sharedPreferences = getSharedPreferences(getString(R.string.sheredApps),MODE_PRIVATE);
SharedPreferences.Editor editor = sharedPreferences.edit();
Gson gson = new Gson();
String json = gson.toJson(apps);
editor.putString(getString(R.string.sheredAppsKeyList),json);
editor.apply();
for (AppInfo ap: apps) { Log.i("Apka: ",""+ap.toString()); }
}
I jej rezultat:
2/X.pl I/Apka:: X.pl.objects.AppInfo@c08e60e
2020-11-04 20:30:22.592 13252-13252/X.pl I/Apka:: X.pl.objects.AppInfo@2b6682f
2020-11-04 20:30:22.592 13252-13252/X.pl I/Apka:: X.pl.objects.AppInfo@ec2de3c
2020-11-04 20:30:22.592 13252-13252/X.pl I/Apka:: X.pl.objects.AppInfo@71717c5
Natomiast Json po próbie odczytania wygląda tak:
I/JSON:: [{"info":{"category":-1,"compatibleWidthLimitDp":0,"credentialProtectedDataDir":"/data/user/0/com.android.cts.priv.ctsshim","dataDir":"/data/user/0/com.android.cts.priv.ctsshim","descriptionRes":0,"deviceProtectedDataDir":"/data/user_de/0/com.android.cts.priv.ctsshim","enabled":true,"enabledSetting":0,"flags":-1198997951,"fullBackupContent":0,"installLocation":-1,"largestWidthLimitDp":0,"maxAspectRatio":0.0,"minSdkVersion":24,"nativeLibraryDir":"/system/priv-app/CtsSh
Natomiast mam wrażenie że on się ucina i też gdzieś ginie.
Ma ktoś jakieś pomysły/sugestie ?