【问题标题】:Using shared preferences editor使用共享首选项编辑器
【发布时间】:2011-06-25 10:37:20
【问题描述】:

我正在慢慢阅读一本 Android 学习书,并获得了以下代码来分配用户数据:

package com.androidbook.triviaquiz;

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

public class QuizActivity extends Activity {
    public static final String GAME_PREFERENCES = "GamePrefs";
    SharedPreferences settings = getSharedPreferences(GAME_PREFERENCES, MODE_PRIVATE);
    SharedPreferences.Editor prefEditor = settings.edit();
    prefeditor.putString("UserName", "John Doe"); //**syntax error on tokens**
    prefEditor.putInt("UserAge", 22); //**syntax error on tokens**
    prefEditor.commit();
}

但是,我收到一个错误(用 cmets 指示的行),它在句点下划线并说“错位构造”,并且还强调说“删除这些标记”的论点。我在其他应用程序中看到过以相同格式执行此操作,我不明白有什么问题。

【问题讨论】:

    标签: android sharedpreferences


    【解决方案1】:

    编辑:当然!这些语句不能直接放入该级别的类中,必须在方法中,如下所示:

    public class QuizActivity extends Activity {
        public static final String GAME_PREFERENCES = "GamePrefs";
    
        @Override
        public void onCreate(Bundle savedInstanceState)
        {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.main);
    
            SharedPreferences settings = getSharedPreferences(GAME_PREFERENCES, MODE_PRIVATE);
            SharedPreferences.Editor prefEditor = settings.edit();
            prefEditor.putString("UserName", "John Doe");
            prefEditor.putInt("UserAge", 22);
            prefEditor.putString("Gender", "Male");
            prefEditor.commit();
        }
    }
    

    【讨论】:

    • 应该是全部,但我想知道错误的类型。
    • prefEditor 不只是指我之前定义的实例吗?在这种情况下,没有理由大写应该与我声明的实例不同。也许我遗漏了一些东西.... 编辑:我只是注意到两个 prefeditor 调用中的情况不同。两者都应该是prefEditor。然而这并不能解决任何问题。
    • 奇怪;我没有看到您的代码有任何其他问题。你用的是什么IDE?正如 Markus Drösser 指出的那样,这些都是奇怪的错误消息。
    • 我在 Eclipse 中使用 android 插件工作。我一直在阅读的所有书籍都适合初学者,所以我试了一下。
    • 我已经编辑了我的答案 - 我错过了一个明显的错误。
    【解决方案2】:

    我认为您可能错过了 OnCreate() 方法,请确保您应该将共享首选项放在您的 OnCreate() 方法中...我刚刚编辑了您的代码通过它

    请查看以下代码...

    public class A extends Activity {
    static SharedPreferences settings;
     public static final String PREFS_NAME = "YourPrefName";
    
    @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            settings = getSharedPreferences(PREFS_NAME, 0);
    Log.v("UserName"," - "+settings.getString("username","android"));
    SharedPreferences.Editor editor = settings.edit();          
                editor.putString("username","Change Android");          
                editor.commit();
    
    Log.v("UserName after changed editing preference key value"," - "+settings.getString("username","android"));
    
    
    }
    
    }
    

    【讨论】:

    • 这本书并没有真正提到应该放置此代码的层次结构中的位置。我假设这本书提到的最后一个对象,但也许我弄错了。
    【解决方案3】:

    SharedPreferences 将在 onCreate() 方法旁边工作,只要它有上下文:

    SharedPreferences settings = getAplicationContext().getSharedPreferences(GAME_PREFERENCES, MODE_PRIVATE);
    

    【讨论】:

      猜你喜欢
      • 2013-02-01
      • 1970-01-01
      • 1970-01-01
      • 2015-02-01
      • 1970-01-01
      • 1970-01-01
      • 2014-08-17
      • 1970-01-01
      相关资源
      最近更新 更多