Saya tahu ini pertanyaan lama tetapi saya ingin berbagi pendekatan saya. Saya memiliki waktu membaca yang lama dan menggunakan kombinasi preferensi bersama dan kelas aplikasi global:
ApplicationClass:
public class ApplicationClass extends Application {
private LocalPreference.Filter filter;
public LocalPreference.Filter getFilter() {
return filter;
}
public void setFilter(LocalPreference.Filter filter) {
this.filter = filter;
}
}
LocalPreference:
public class LocalPreference {
public static void saveLocalPreferences(Activity activity, int maxDistance, int minAge,
int maxAge, boolean showMale, boolean showFemale) {
Filter filter = new Filter();
filter.setMaxDistance(maxDistance);
filter.setMinAge(minAge);
filter.setMaxAge(maxAge);
filter.setShowMale(showMale);
filter.setShowFemale(showFemale);
BabysitApplication babysitApplication = (BabysitApplication) activity.getApplication();
babysitApplication.setFilter(filter);
SecurePreferences securePreferences = new SecurePreferences(activity.getApplicationContext());
securePreferences.edit().putInt(Preference.FILER_MAX_DISTANCE.toString(), maxDistance).apply();
securePreferences.edit().putInt(Preference.FILER_MIN_AGE.toString(), minAge).apply();
securePreferences.edit().putInt(Preference.FILER_MAX_AGE.toString(), maxAge).apply();
securePreferences.edit().putBoolean(Preference.FILER_SHOW_MALE.toString(), showMale).apply();
securePreferences.edit().putBoolean(Preference.FILER_SHOW_FEMALE.toString(), showFemale).apply();
}
public static Filter getLocalPreferences(Activity activity) {
BabysitApplication babysitApplication = (BabysitApplication) activity.getApplication();
Filter applicationFilter = babysitApplication.getFilter();
if (applicationFilter != null) {
return applicationFilter;
} else {
Filter filter = new Filter();
SecurePreferences securePreferences = new SecurePreferences(activity.getApplicationContext());
filter.setMaxDistance(securePreferences.getInt(Preference.FILER_MAX_DISTANCE.toString(), 20));
filter.setMinAge(securePreferences.getInt(Preference.FILER_MIN_AGE.toString(), 15));
filter.setMaxAge(securePreferences.getInt(Preference.FILER_MAX_AGE.toString(), 50));
filter.setShowMale(securePreferences.getBoolean(Preference.FILER_SHOW_MALE.toString(), true));
filter.setShowFemale(securePreferences.getBoolean(Preference.FILER_SHOW_FEMALE.toString(), true));
babysitApplication.setFilter(filter);
return filter;
}
}
public static class Filter {
private int maxDistance;
private int minAge;
private int maxAge;
private boolean showMale;
private boolean showFemale;
public int getMaxDistance() {
return maxDistance;
}
public void setMaxDistance(int maxDistance) {
this.maxDistance = maxDistance;
}
public int getMinAge() {
return minAge;
}
public void setMinAge(int minAge) {
this.minAge = minAge;
}
public int getMaxAge() {
return maxAge;
}
public void setMaxAge(int maxAge) {
this.maxAge = maxAge;
}
public boolean isShowMale() {
return showMale;
}
public void setShowMale(boolean showMale) {
this.showMale = showMale;
}
public boolean isShowFemale() {
return showFemale;
}
public void setShowFemale(boolean showFemale) {
this.showFemale = showFemale;
}
}
}
MainActivity (aktivitas yang dipanggil pertama kali dalam aplikasi Anda):
LocalPreference.getLocalPreferences(this);
Langkah-langkah menjelaskan:
- Aktivitas utama memanggil getLocalPreferences (ini) -> ini akan membaca preferensi Anda, menyetel objek filter di kelas aplikasi Anda dan mengembalikannya.
- Saat Anda memanggil fungsi getLocalPreferences () lagi di tempat lain dalam aplikasi, fungsi tersebut akan memeriksa terlebih dahulu apakah fungsi itu tidak tersedia di kelas aplikasi yang jauh lebih cepat.
CATATAN: SELALU periksa apakah variabel lebar aplikasi berbeda dari NULL, alasan -> http://www.developerphil.com/dont-store-data-in-the-application-object/
Objek aplikasi tidak akan tinggal di memori selamanya, itu akan dimatikan. Berlawanan dengan kepercayaan populer, aplikasi tidak akan dimulai ulang dari awal. Android akan membuat objek Aplikasi baru dan memulai aktivitas di mana pengguna berada sebelumnya untuk memberikan ilusi bahwa aplikasi tidak pernah mati sejak awal.
Jika saya tidak memeriksa null, saya akan mengizinkan nullpointer dilemparkan saat memanggil misalnya getMaxDistance () pada objek filter (jika objek aplikasi digesek dari memori oleh Android)