Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/227.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在activity/normal类中获取Android共享首选项值_Android_Sharedpreferences - Fatal编程技术网

在activity/normal类中获取Android共享首选项值

在activity/normal类中获取Android共享首选项值,android,sharedpreferences,Android,Sharedpreferences,我制作了一个存储用户设置的共享首选项活动,现在我想获取活动或普通java类中的值。请提供一个解决方案或示例。我已经尝试了此代码,但失败了 public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); SharedPreferences channel=this.getSharedPreferences(strFile, Context.MODE_PRIVATE);

我制作了一个存储用户设置的共享首选项活动,现在我想获取活动或普通java类中的值。请提供一个解决方案或示例。我已经尝试了此代码,但失败了

public void onCreate(Bundle savedInstanceState) 
{
    super.onCreate(savedInstanceState);
    SharedPreferences channel=this.getSharedPreferences(strFile, Context.MODE_PRIVATE);
    strChannel=channel.getString(keyChannel,"Default").toString();
    Toast.makeText(getApplicationContext(), strChannel, Toast.LENGTH_LONG).show();
}                     
在该代码中,例如,
com.android.pack.ClassName的
strfile
是从要获取的值中获取的
SharedReference活动
,而keyChannel是与
SharedReference活动
相同的键


请提供解决方案。

如果您有用于保存值的SharedReferenceActivity

SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this);
String imgSett = prefs.getString(keyChannel, "");
如果该值保存在活动的SharedReference中,则这是保存该值的正确方法

SharedPreferences shared = getSharedPreferences(PREF_NAME, MODE_PRIVATE);
SharedPreferences.Editor editor = shared.edit();
editor.putString(keyChannel, email);
editor.commit();// commit is important here.
这就是如何检索值的方法

SharedPreferences shared = getSharedPreferences(PREF_NAME, MODE_PRIVATE);
String channel = (shared.getString(keyChannel, ""));
还要注意,您也可以在非活动类中这样做,但唯一的条件是您需要传递活动的上下文。在中使用此上下文可获取SharedReferences

mContext.getSharedPreferences(PREF_NAME, MODE_PRIVATE);

这是我觉得最简单的程序:
SharedPreferences sp = getSharedPreferences("MySharedPrefs", MODE_PRIVATE);
SharedPreferences.Editor e = sp.edit();

    if (sp.getString("sharedString", null).equals("true")
            || sp.getString("sharedString", null) == null) {
        e.putString("sharedString", "false").commit();
        // Do something
    } else {
        // Do something else
    }

我尝试了以下代码,从活动中检索共享首选项,但无法使其正常工作:

        SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(this);
    sharedPreferences.getAll();
    Log.d("AddNewRecord", "getAll: " + sharedPreferences.getAll());
    Log.d("AddNewRecord", "Size: " + sharedPreferences.getAll().size());
每次尝试时,我的首选项都返回0,即使首选项活动保存了14个首选项。 我终于找到了答案。我将其添加到onCreate部分的首选项中

getPreferenceManager().setSharedPreferencesName(“默认首选项”)


添加此语句后,我保存的首选项按预期返回。我希望这能帮助可能遇到与我相同问题的其他人。

您使用卸载应用程序并更改SharedReferences名称,然后运行此应用程序。我认为这将解决这个问题

从SharedReferences检索值的示例代码您可以使用以下代码集:

SharedPreferences shared = getSharedPreferences(PREF_NAME, MODE_PRIVATE);
String channel = (shared.getString(keyValue, ""));

这段代码产生了什么?是否引发异常?是否有错误?这不起作用,这就是你所说的吗?我无法理解一件事,那就是SharedReferences shared=GetSharedReferences(首选名称,MODE\u PRIVATE)之间的区别;字符串通道=(shared.getString(keyChannel,“”);此SharedReferences通道=this.getSharedReferences(strFile,Context.MODE\u PRIVATE);strChannel=channel.getString(keyChannel,“Default”).toString();请告诉我PREF_NAME的值是多少,请提供示例,可能是我给出了错误的类路径。我给出了字符串strFile=“com.android.pref.PrefClass”;只有一个字符串。它可以是任何东西,例如:应用程序名、名称、类名等。这两个语句之间绝对没有区别。您的输出是什么?BTWit显示空白toast,但我很困惑,新活动如何知道要获取哪个首选项。请解释匹配的参数是什么,通过它可以得到一个特定的值…如果我在getString(键,“Default”)中输入一些值,那么Toast上的默认值是give Default。在应用程序中的所有活动中,PREF_名称应该是相同的。这是改变的关键。SharedReferences shared=GetSharedReferences(首选名称,模式\私有);此行在应用程序内存中保留一个内存池。当您使用以下行时。。。编辑器.putString(keyChannel,val);创建一个空间并将val存储在其中,并且可以通过变量keyChannel进行标识。