【问题标题】:how to make different shared preference file in one application如何在一个应用程序中制作不同的共享首选项文件
【发布时间】: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


【解决方案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);

【讨论】:

    猜你喜欢
    • 2012-09-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多