无法访问从一个类到另一个类的共享首选项

时间:2014-06-26 07:47:34

标签: android sharedpreferences classcastexception

您好我正在开发Android openGL动态壁纸。我无法访问从wallpaperService到渲染器类的共享首选项。我收到的错误如下:

06-26 01:42:38.285: E/AndroidRuntime(4778): FATAL EXCEPTION: main
06-26 01:42:38.285: E/AndroidRuntime(4778): java.lang.ClassCastException: java.lang.Integer cannot be cast to java.lang.String
06-26 01:42:38.285: E/AndroidRuntime(4778):     at android.app.SharedPreferencesImpl.getString(SharedPreferencesImpl.java:224)
06-26 01:42:38.285: E/AndroidRuntime(4778):     at com.srashtaa.planets3dgalaxylivewallpaper.NeheLesson08Renderer.LoadPreferences(NeheLesson08Renderer.java:155)
06-26 01:42:38.285: E/AndroidRuntime(4778):     at com.srashtaa.planets3dgalaxylivewallpaper.NeheLesson08Renderer.setContext(NeheLesson08Renderer.java:146)
06-26 01:42:38.285: E/AndroidRuntime(4778):     at com.srashtaa.planets3dgalaxylivewallpaper.NeheLesson08WallpaperService$MyEngine.<init>(NeheLesson08WallpaperService.java:42)
06-26 01:42:38.285: E/AndroidRuntime(4778):     at com.srashtaa.planets3dgalaxylivewallpaper.NeheLesson08WallpaperService.onCreateEngine(NeheLesson08WallpaperService.java:26)

这是我的代码:

         sharedPreferences = getSharedPreferences(PREFERENCES, MODE_PRIVATE);
         String rotspeed = null;
         String storedPreference = sharedPreferences.getString("rotspeed", "key");
         SharedPreferences.Editor editor = sharedPreferences.edit();
         editor.putString("rotspeed", storedPreference); // value to store
         editor.commit();
         String check=sharedPreferences.getString("rotspeed", "");
         System.out.println("stored procedure values::"+check);

这里我试图获得偏好值,

               prefs= PreferenceManager.getDefaultSharedPreferences(value);
               storedPreference= prefs.getString("rotspeed","0");

有谁能告诉我为什么会收到此错误?

5 个答案:

答案 0 :(得分:1)

06-26 01:42:38.285: E/AndroidRuntime(4778): java.lang.ClassCastException: java.lang.Integer cannot be cast to java.lang.String

此行说明您正在尝试将整数转换为String。因此崩溃。确保如果您在SharedPrefs中将值保存为String,则需要将其作为String检索。

答案 1 :(得分:1)

您正在尝试从您放置一些整数首选项的位置获取String首选项。您需要向我们展示代码,以便我们为您提供帮助。我想你做过这样的事情:

 mEditor.putInt("KEY",1);

并且您正试图通过以下方式获得此值:

 mPrefs.getString("KEY");

请告诉我们您的密码。

答案 2 :(得分:1)

      //Try This 

        SharedPreferences sharedPreferences =  PreferenceManager.getDefaultSharedPreferences(this);

        Editor editor = sharedPreferences.edit();

        editor.putString("rotspeed", value);

        editor.commit();

   }

   SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(this);
   String name = sharedPreferences.getString("rotspeed", "1000");

答案 3 :(得分:0)

editor.putString()的两个参数是您要存储的键和字符串,而不是对SharedPreferences对象的引用。例如

editor.putString("rotspeed", "1000")

请参阅此处了解SharedPreferences.Editor的文档:

http://developer.android.com/reference/android/content/SharedPreferences.Editor.html

这里有一些关于使用SharedPreferences的好的介绍:

http://developer.android.com/training/basics/data-storage/shared-preferences.html How to use SharedPreferences in Android to store, fetch and edit values

答案 4 :(得分:0)

感谢所有回答我问题的人。所有的答案都很感激。当我从其他活动中调用偏好时,我的错误是,活动没有保持其上下文.Thatsy我无法访问首选项。

           public void setContext(Context value) {
mContext = value;

    prefs = value.getSharedPreferences(PREFERENCES,NeheLesson08SettingsActivity.MODE_PRIVATE);


}

我没有放置&#34;价值&#34;面对getSharedPreferences。

感谢!!!