Использование редактора общих настроек

Я медленно работаю над учебным пособием по 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();
}

Однако я получаю сообщение об ошибке (строки, указанные с комментариями), в которой подчеркивается точка и говорится «неуместная конструкция», а также подчеркиваются аргументы, говорящие «удалить эти токены». Я видел, как это делается в других приложениях в том же формате, я не понимаю, что не так.


person Gaege    schedule 11.02.2011    source источник


Ответы (3)


Редактировать: Конечно! Эти операторы не могут быть помещены непосредственно в класс на этом уровне и должны быть внутри метода, примерно так:

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();
    }
}
person trojanfoe    schedule 11.02.2011
comment
должно быть все, но меня интересует тип ошибок. - person mad; 11.02.2011
comment
Разве prefEditor не ссылается только на экземпляр, который я определяю непосредственно перед этим? В этом случае нет причин, по которым использование заглавных букв должно отличаться от заявленного мной экземпляра. Может быть, я что-то упускаю... РЕДАКТИРОВАТЬ: я только что заметил, что в двух вызовах prefeditor дело обстояло иначе. Оба должны были быть prefEditor. Однако это ничего не решает. - person Gaege; 11.02.2011
comment
Странный; Я не вижу ничего плохого в вашем коде. Какую IDE вы используете? Как заметил Маркус Дрёссер, это странные сообщения об ошибках. - person trojanfoe; 11.02.2011
comment
Я работаю в eclipse с плагином для Android. Все книги, которые я читал, подталкивали к этому новичков, поэтому я попробовал. - person Gaege; 11.02.2011
comment
Я отредактировал свой ответ - это была вопиющая ошибка, которую я пропустил. - person trojanfoe; 11.02.2011
comment
Хаха явная ошибка. Я все еще пытаюсь понять структуру вещей. Я бы хотел, чтобы это было вопиющей ошибкой для меня. В книге не упоминается переопределение или размещение в методе onCreate. Я пытаюсь сделать это, изучая Java, и моя единственная история с программированием — это вводный курс по C около года назад. Не весело, когда учебные материалы не ясны. - person Gaege; 11.02.2011
comment
Да, это не может быть легко - продолжайте в том же духе, поскольку я думаю, что вы изучаете что-то очень стоящее и полезное и используете лучший из существующих языков программирования (но ведь все программисты так говорят о своем языке - если они этого не сделали, значит, что-то не так ). - person trojanfoe; 11.02.2011
comment
Спасибо троян. Я посмотрю, смогу ли я не отставать от него, пройдя полный семестр занятий по машиностроению, ха-ха. Спасибо и за помощь. - person Gaege; 11.02.2011

Я думаю, вы могли пропустить метод 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"));


}

}
person Senthil Mg    schedule 11.02.2011
comment
В книге на самом деле не упоминалось место в иерархии, где должен быть размещен этот код. Я предположил последний объект, упомянутый в книге, но, возможно, я ошибся. - person Gaege; 11.02.2011

SharedPreferences будет работать на стороне метода onCreate(), если у него есть контекст:

SharedPreferences settings = getAplicationContext().getSharedPreferences(GAME_PREFERENCES, MODE_PRIVATE);
person Eliud    schedule 22.02.2013