【发布时间】:2020-12-09 13:56:32
【问题描述】:
我有 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);
}
}
【问题讨论】:
-
您是否调试并检查过“mContext.getPackaeName()”是什么?两种情况都一样吗?
-
看起来注释掉的代码应该可以工作,而
mContext.getPackageName()不应该工作,因为它在两种情况下都返回相同的字符串。我是否正确理解注释掉的代码不起作用?
标签: android database android-studio sharedpreferences