2011-02-11 20 views
19

estoy trabajando lentamente a través de un libro de aprendizaje de Android y se le dio el siguiente código para asignar datos de usuario:preferencias compartidas editor de

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(); 
} 

Sin embargo, me da un error (líneas indicadas con los comentarios) que subraya la punto y dice "construcción fuera de lugar" y también que subraya los argumentos que dicen "eliminar estos tokens". He visto esto hecho en otras aplicaciones en el mismo formato, no entiendo lo que está mal.

+0

Compruebe este blog http://www.gadgetsaint.com/go/xb023 – ASP

Respuesta

31

Editar: ¡Por supuesto! Esas declaraciones no se pueden poner directamente en la clase en ese nivel y deben estar dentro de un método, algo como esto:

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(); 
    } 
} 
+0

debería ser todo, pero me pregunto acerca del tipo de errores. – mad

+0

¿No es prefEditor simplemente refiriéndose a la instancia que defino inmediatamente antes? En ese caso, no hay ninguna razón para que la capitalización sea diferente de la instancia que declare. Tal vez me esté perdiendo algo ... EDIT: acabo de notar que el caso era diferente en las dos llamadas al prefijo. Se suponía que ambos debían ser prefEditor. Sin embargo, esto no soluciona nada. – Gaege

+0

Extraño; No veo nada más incorrecto con tu código. ¿Qué IDE estás usando? Como señaló Markus Drösser, estos son mensajes de error extraños. – trojanfoe

3

Creo que puede perderse hasta OnCreate() método, vamos a estar seguro de que debe colocar la preferencia compartida en su método OnCreate() ... i acaba de editar el código de pasar por ella

por favor vaya a través del código de abajo ...

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")); 


} 

} 
+0

El libro realmente no ha mencionado la ubicación dentro de la jerarquía de donde debe colocarse este código. Supuse el último objeto al que se refería el libro, pero tal vez estaba equivocado. – Gaege

0

SharedPreferences funcionará fuera del lado de un método onCreate(), siempre y cuando tiene un contexto:

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