как создать другой файл общих настроек в одном приложении

#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);