【问题标题】:discussion on sharedpreferences关于共同偏好的讨论
【发布时间】:2012-05-02 17:33:29
【问题描述】:

我正在为Sams Android Development in 24 hours学习 Android 开发。我正在实现一个名为 theredone 的游戏,其中包含以下活动:

quizactivitysplashactivitygameactivitymenuactivitysettingsactivityhelpactivitysplashactivity 扩展 quizactivityquizactivity 扩展 Activity

我在quizactivity.java 中实现了SharedPreferences

package com.androidbook.triviaquiz6;

import android.app.Activity;
import android.content.SharedPreferences;

public class QuizActivity extends Activity {
    public static final String GAME_PREFERENCES = "GamePrefs";

    private SharedPreferences myPrefs; //Syntax error on token ";", { expected after this token -//----------------------------


   myPrefs = Actionactivity.this.getSharedPreferences("myPrefs", MODE_WORLD_WRITEABLE);
   SharedPreferences.Editor prefsEditor = myPrefs.edit(); 
   prefsEditor.putString("key name", "key valuse"); 
   prefsEditor.commit(); 


   //this one to read data  
    myPrefs = this.getSharedPreferences("myPrefs", MODE_WORLD_READABLE); 

    myPrefs.getString("key name", "") ;
}//Syntax error, insert "}" to complete ClassBody -----------------------

你能帮我吗?我不认为这是一个愚蠢的问题

【问题讨论】:

  • 非常相关:*.com/questions/10243080/…;请选择一本好的 Java 书籍和教程,您缺少基础知识。
  • 可能是你的包名中的数字。哦,事实是您缺少 Android Activity 生命周期方法!

标签: android eclipse


【解决方案1】:

您在 QuizActivity 活动中引用了 Actionactivity 活动。 ActionActivity 尚未实例化,您正在使用它打开getSharedPreferences

getSharedPreferences 方法属于上下文方法,对于当前活动,您可以参考this 实例来调用此getSharedPreferences 方法。

如果您不想使用活动的上下文,那么您可以通过调用getApplicationContext() 来使用application context

有关偏好的更多信息,您可以参考this

【讨论】:

    【解决方案2】:

    您可以使用以下代码作为共享首选项的参考::::并且在您的代码中您没有 oncreate 方法

    //Retrive value from SharedPreference
    SharedPreferences preferences = getApplicationContext().getSharedPreferences(GAME_PREFERENCES , android.content.Context.MODE_WORLD_WRITEABLE);
    String value =  preferences.getString(key, null);
    
    
    //Save value in SharedPreference
    SharedPreferences preferences = getApplicationContext().getSharedPreferences(GAME_PREFERENCES , android.content.Context.MODE_WORLD_WRITEABLE);
    SharedPreferences.Editor editor = preferences.edit();
    editor.putString(key, value);
    editor.commit();
    

    更新:::

    package com.androidbook.triviaquiz6;
    
    import android.app.Activity;
    import android.content.SharedPreferences;
    
    public class QuizActivity extends Activity {
        public static final String GAME_PREFERENCES = "GamePrefs";
        private SharedPreferences myPrefs;
        protected void onCreate(Bundle savedInstanceState) {
        ....
    
        //this one data set in SharedPreferences file
    
        myPrefs = Actionactivity.this.getSharedPreferences("myPrefs", MODE_WORLD_WRITEABLE);
        SharedPreferences.Editor prefsEditor = myPrefs.edit();
        prefsEditor.putString("ket name", "key valuse");
        prefsEditor.commit();
    
        }
    }
    

    【讨论】:

    • 如何使用 oncreate 方法。我问这个是因为在 res\layout 中我在 .xml 中没有任何@string。我有 splash.xml、menu.xml、game.xml、scores.xml、settings.xml、help.xml。我如何使用 oncreate。
    • 你说的是哪个空间