从另一个 activity android 获取 SharedPreferences

Get SharedPreferenes from another activity android

我正在尝试将我在两个不同活动中保存的 SharedPreferenes 获取到我的 SMS activity。它们都保存为字符串。

对于 phone 号码,它被保存为一个字符串,并且直接在 onActivityResult 内部(因为它正在从联系人列表中获取 phone 号码)

prefs = getSharedPreferences(prefName, MODE_PRIVATE);
                        SharedPreferences.Editor editor = prefs.edit();

                        //---save the values in the EditText view to preferences---
                        editor.putString("phoneNumber", phn_no);

                        //---saves the values---
                       editor.commit();

                        phoneN.setText(phn_no);
                        Toast.makeText(getBaseContext(), "Saved",
                                Toast.LENGTH_SHORT).show();

对于消息,它有一个方法。

public void AddMessage() {
    btnSave.setOnClickListener(
            new View.OnClickListener() {
                @Override
                public void onClick(View v) {

                    prefs = getSharedPreferences(prefName, MODE_PRIVATE);
                    SharedPreferences.Editor editor = prefs.edit();

                    //---save the values in the EditText view to preferences---
                    //editor.putInt("id", Integer.parseInt(e_id.getText().toString()));
                    editor.putString("message", editMessage.getText().toString());

                    //---saves the values---
                    editor.commit();

                    Toast.makeText(getBaseContext(), "Saved",
                            Toast.LENGTH_SHORT).show();
                }
            }

    );
}

我试过这样做:

SharedPreferences settings =    PreferenceManager.getDefaultSharedPreferences(this);
                        String phoneNum = settings.getString("phoneNumber", "");
                        String message = settings.getString("message", "");
                        Log.d(TAG, message.toString());
                        Log.d(TAG, phoneNum.toString());

但是这里没有保存。可能做错了...

在此先感谢您的帮助!

编辑

也试过这样做:

SharedPreferences spref = PreferenceManager.getDefaultSharedPreferences(this);
                        if (spref.contains("message")) {
                            String mes = spref.getString("message", "");
                            Log.d(TAG, mes)
;                            }
                        if(spref.contains("phoneNumber")){
                            String phn = spref.getString("phoneN", "");
                            Log.d(TAG,phn);
                        }

没用。日志中没有显示任何内容。

而不是这一行

SharedPreferences settings =    PreferenceManager.getDefaultSharedPreferences(this);

使用

SharedPreferences settings = getSharedPreferences(prefName, MODE_PRIVATE);

在访问共享首选项时使用它而不是

PreferenceManager.getDefaultSharedPreferences(this);

// 使用这个

SharedPreferences settings = getSharedPreferences(prefName, MODE_PRIVATE);

您想在“首选项”中存储诸如...之类的内容。所以喜欢 首先创建 Common class like..

package com.ibl.commonClass;

import android.content.Context;

import android.content.SharedPreferences;

import android.content.SharedPreferences.Editor;

import android.graphics.Bitmap;

import android.net.ConnectivityManager;

import android.net.NetworkInfo;

import android.preference.PreferenceManager;

import android.view.View;


public class Global {

public SharedPreferences SharedPref;
Editor Editor;
Context context;
public Global(Context context) {
    this.context = context;
    SharedPref = this.context.getSharedPreferences("PREFS_NAME",
            Context.MODE_PRIVATE);

}

public static void setPreferenceString(Context c, String pref, String val) {
    Editor e = PreferenceManager.getDefaultSharedPreferences(c).edit();
    e.putString(pref, val);
    e.commit();
}

public static void setPreferenceInt(Context c, String pref, int val) {
    Editor e = PreferenceManager.getDefaultSharedPreferences(c).edit();
    e.putInt(pref, val);
    e.commit();
}

public static void setPreferenceLong(Context c, String pref, Long val) {
    Editor e = PreferenceManager.getDefaultSharedPreferences(c).edit();
    e.putLong(pref, val);
    e.commit();
}

public static void setPreferenceBoolean(Context c, String pref, Boolean val) {
    Editor e = PreferenceManager.getDefaultSharedPreferences(c).edit();
    e.putBoolean(pref, val);
    e.commit();
}

public static void clearPreferenceUid(Context c, String pref) {
    Editor e = PreferenceManager.getDefaultSharedPreferences(c).edit();
    e.remove(pref);
    e.commit();
}

public static boolean getPreferenceBoolean(Context c, String pref,
        Boolean val) {
    return PreferenceManager.getDefaultSharedPreferences(c).getBoolean(
            pref, val);
}

public static int getPreferenceInt(Context c, String pref, int val) {
    return PreferenceManager.getDefaultSharedPreferences(c).getInt(pref,
            val);
}

public static Long getPreferenceLong(Context c, String pref, Long val) {
    return PreferenceManager.getDefaultSharedPreferences(c).getLong(pref,
            val);
}

public static String getPreferenceString(Context c, String pref, String val) {
    return PreferenceManager.getDefaultSharedPreferences(c).getString(pref,
            val);
}

}

现在您可以使用任何 activity 设置首选项,例如

 String mEmail;

这是我在用户登录应用程序时得到的

 mEmail = obj.getString("email");
Global.setPreferenceString(getApplicationContext(), "email",mEmail);

这样你就可以得到首选项

 Global.getPreferenceString(getActivity(), "email", "");

在 Activity 中使用 "getApplicationContext()" 和片段“getActivity()” 感谢和问候

似乎您遗漏了什么,我不知道是什么,但是请尝试将 SharedPreference 名称保存在常量文件中 并使其成为最终文件。因为您有可能将值保存在不同的 SharedPreference 中并从不同的中获取。例如:--

/*
**Declare SharedPreference name as a final
*/
public static final String PREFS_NAME = "MY_PREFS";

现在使用此变量从任何地方获取 SharedPreferences。例如:--

SharedPreferences prefs = context.getSharedPreference(PREFS_NAME, MODE_PRIVATE);