尝试获取首选项时为空指针

时间:2013-08-24 19:38:36

标签: android android-preferences

我在尝试设置Google Play商店的偏好设置时获得空指针。以下代码显示了Facebook和Google Play商店的偏好设置代码。 Facebook代码运行良好。如果我为播放商店首选项取出2行java代码,它会正确显示(但当然不会做任何事情)。在stackoverflow上,我看到4个问题,询问从findPreference()返回的空值。其中3个未得到答复。 :(。有什么想法吗?

LiveWallpaperSettings.java - OnCreate()

final Preference facebookPreference = (Preference) findPreference("Facebook");
facebookPreference.setOnPreferenceClickListener(this);

final Preference googlePlayStorePreference = (Preference) findPreference("More from developer"); // assigned null
googlePlayStorePreference.setOnPreferenceClickListener(this);

LiveWallpaperSettings.xml

<PreferenceCategory android:title="@string/livewallpaper_settings" >
    <Preference
        android:icon="@drawable/facebook"
        android:key="@string/preferenceKeyFacebook"
        android:summary="@string/facebook"
        android:title="@string/facebook" />
    <Preference
        android:icon="@drawable/google_play_store"
        android:key="@string/preferenceKeyGooglePlay"
        android:summary="@string/dev_name"
        android:title="@string/morefromdeveloper" />
</PreferenceCategory>

我看到一个建议使用holo的页面,但是没有编译。我认为因为项目的构建目标是4.0.3

<PreferenceCategory android:title="@string/livewallpaper_settings" >
    <Preference
        android:icon="@drawable/facebook"
        android:key="@string/preferenceKeyFacebook"
        android:summary="@string/facebook"
        android:title="@string/facebook" />
    <Preference
        android:icon="@drawable/google_play_store"
        holo:key="@string/preferenceKeyGooglePlay"
        holo:summary="@string/dev_name"
         holo:title="@string/morefromdeveloper" />
</PreferenceCategory>

的strings.xml

<string name="preferenceKeyFacebook">facebook</string> 
<string name="preferenceKeyGooglePlay">googleplay</string>

我有一个必然的问题。在处理首选项单击的方法(下面)中,我将arg0.getKey()与“facebook”进行比较,因为getKey()返回一个字符串。我无法比较R.string.preferenceKeyFacebook,因为它是一个int。这有效,但我想知道是否有更好的方式,风格,这样做。也许将arg0转换为int,或将R.string.preferenceKeyFacebook转换为字符串。

public boolean onPreferenceClick(Preference arg0) {
    if (arg0.getKey().equals("facebook")) {

答案是将“facebook”替换为:

getResources().getString(R.string.preferenceKeyFacebook)

2 个答案:

答案 0 :(得分:2)

您要按标题而不是按键询问偏好,这应该可以解决您的问题:

final Preference facebookPreference = (Preference) findPreference("facebook");
facebookPreference.setOnPreferenceClickListener(this);

final Preference googlePlayStorePreference = (Preference) findPreference("googleplay");
googlePlayStorePreference.setOnPreferenceClickListener(this);

答案 1 :(得分:1)

正确的代码应该是:

final Preference facebookPreference = findPreference(getString(R.string.preferenceKeyFacebook));
final Preference googlePlayStorePreference = findPreference(getString(R.string.preferenceKeyGooglePlay));