#android #database #android-studio #sharedpreferences
#Android #База данных #android-studio #sharedpreferences
Вопрос:
У меня есть 2 действия с 2 разными общими предпочтениями. Каждый раз, когда я передаю значения из действия 1, они не должны отображаться в действии 2. Я пробовал с другим именем, но оно не работает. Я все сделал правильно. Это первый код:
package com.example.e_pertanian.irigasi;
import android.content.Context;
import android.content.SharedPreferences;
public class SimpanWaktuIrigasi {
private SharedPreferences mPreferencesIrigasi; //mendefinisikan sharedPreferences pada aplikasi ini
private String sharedPrefFile = "com.example.e_pertanian.irigasi"; //lokasi file sharedPreferences disimpan yang com. itu harus sama kayak nama packagenya
private Context mContext;
private final String COUNT_JAM = "jam";
private final String COUNT_MENIT = "menit";
private final String COUNT_DETIK = "detik";
private static SimpanWaktuIrigasi instance;
private int jam, menit, detik;
public static SimpanWaktuIrigasi getInstance(Context context) {
if (instance == null) {
instance = new SimpanWaktuIrigasi(context);
}
return instance;
}
private SimpanWaktuIrigasi(Context context) {
mContext = context;
// mPreferences = mContext.getSharedPreferences(sharedPrefFile, Context.MODE_PRIVATE);
mPreferencesIrigasi = mContext.getSharedPreferences(mContext.getPackageName(), Context.MODE_PRIVATE);
}
public void writeJam(int jam) {
SharedPreferences.Editor preferencesEditor = mPreferencesIrigasi.edit();
preferencesEditor.putInt(COUNT_JAM, jam);
preferencesEditor.apply();
}
public void writeMenit(int menit) {
SharedPreferences.Editor preferencesEditor = mPreferencesIrigasi.edit();
preferencesEditor.putInt(COUNT_MENIT, menit);
preferencesEditor.apply();
}
public void writeDetik(int detik) {
SharedPreferences.Editor preferencesEditor = mPreferencesIrigasi.edit();
preferencesEditor.putInt(COUNT_DETIK, detik);
preferencesEditor.apply();
}
public int getJam() {
return mPreferencesIrigasi.getInt(COUNT_JAM, 0);
}
public int getMenit() {
return mPreferencesIrigasi.getInt(COUNT_MENIT, 0);
}
public int getDetik() {
return mPreferencesIrigasi.getInt(COUNT_DETIK, 0);
}
}
Это второй. Все то же самое, кроме имени пакета и имени общих настроек.
package com.example.e_pertanian.watering;
import android.content.Context;
import android.content.SharedPreferences;
public class SimpanWaktuTimer {
private SharedPreferences mPreferences; //mendefinisikan sharedPreferences pada aplikasi ini
private String sharedPrefFile = "com.example.e_pertanian.watering"; //lokasi file sharedPreferences disimpan yang com. itu harus sama kayak nama packagenya
private Context mContext;
private final String COUNT_JAM = "jam";
private final String COUNT_MENIT = "menit";
private final String COUNT_DETIK = "detik";
private static SimpanWaktuTimer instance;
private int jam, menit, detik;
public static SimpanWaktuTimer getInstance(Context context) {
if (instance == null) {
instance = new SimpanWaktuTimer(context);
}
return instance;
}
private SimpanWaktuTimer(Context context) {
mContext = context;
// mPreferences = mContext.getSharedPreferences(sharedPrefFile, Context.MODE_PRIVATE);
mPreferences = mContext.getSharedPreferences(mContext.getPackageName(), Context.MODE_PRIVATE);
}
public void writeJam(int jam) {
SharedPreferences.Editor preferencesEditor = mPreferences.edit();
preferencesEditor.putInt(COUNT_JAM, jam);
preferencesEditor.apply();
}
public void writeMenit(int menit) {
SharedPreferences.Editor preferencesEditor = mPreferences.edit();
preferencesEditor.putInt(COUNT_MENIT, menit);
preferencesEditor.apply();
}
public void writeDetik(int detik) {
SharedPreferences.Editor preferencesEditor = mPreferences.edit();
preferencesEditor.putInt(COUNT_DETIK, detik);
preferencesEditor.apply();
}
public int getJam() {
return mPreferences.getInt(COUNT_JAM, 0);
}
public int getMenit() {
return mPreferences.getInt(COUNT_MENIT, 0);
}
public int getDetik() {
return mPreferences.getInt(COUNT_DETIK, 0);
}
}
Комментарии:
1. Вы отладили и проверили, что такое ‘mContext.getPackaeName ()’? Это то же самое в обоих случаях?
2. Похоже, что закомментированный код должен работать и
mContext.getPackageName()
не должен работать, потому что в обоих случаях он возвращает одну и ту же строку. Правильно ли я понял, что закомментированный код не работает?
Ответ №1:
Вам нужно использовать разные имена для обоих общих SharedPreferences
файлов. В вашем случае это то же mContext.getPackageName()
самое. Вам нужно изменить его, как показано ниже
Для первого:
mPreferencesIrigasi = mContext.getSharedPreferences("com.example.e_pertanian.irigasi", Context.MODE_PRIVATE);
Для второго:
mPreferencesIrigasi = mContext.getSharedPreferences("com.example.e_pertanian.watering", Context.MODE_PRIVATE);