2012-06-01 13 views
7

He estado almacenando una variable global que es necesaria en Actividades en mi aplicación de Android mediante el uso de una subclase de android.app.Application como se explica por Soonil (en How to declare global variables in Android?).No se puede hacer una referencia estática al método no estático (Android getApplicationContext())

El enfoque es similar a esto:

class MyApp extends Application { 

    private String myState; 

    public String getState(){ 
    return myState; 
    } 
     public void setState(String s){ 
     myState = s; 
    } 
} 

class Blah extends Activity { 

    @Override 
    public void onCreate(Bundle b){ 
    ... 
    MyApp appState = ((MyApp)getApplicationContext()); 
    String state = appState.getState(); 
    ... 
    } 
} 

Hasta este punto, este enfoque ha funcionado bien para acceder a la variable global desde cualquiera de mis actividades. Pero hoy en día utilizando el mismo enfoque, tengo el siguiente error:

Cannot make a static reference to the non-static method getApplicationContext() 
from the type ContextWrapper 

La diferencia clave de antes es que la nueva actividad es en realidad un fragmento (SherlockFragmentActivity, para ser exactos).

¿Alguna idea de por qué no puedo acceder a appState como lo hice antes, y hay una buena solución?

Muchas gracias.


EDIT: Buena captura, Matt B. Resulta que el lugar en el que en realidad estoy llamando getApplicationContext() que está dentro de otra clase. Aquí está el punto de llamada:

public class MyActivity extends SherlockFragmentActivity { 
    public static class AccountListFragment extends SherlockListFragment { 
     MyApp appState = ((MyApp)getApplicationContext()); 
     ... 
    } 
    ... 
} 

Además, como se señala más adelante, el error se fue cuando cambié la llamada a

MyApp appState = ((MyApp)getActivity().getApplicationContext()); 
+0

Puede vemos el código real que tiene en su actividad que extiende SherlockFragmentActivity? EDITAR: Intenté 'Application appState = ((Application) getApplicationContext());' en mi 'SherlockFragmentActivity' y se compila muy bien. –

+0

No veo dónde en este ejemplo de código está intentando hacer una referencia estática a ese método. ¿Estás seguro de que has publicado la (s) línea (s) correcta (s)? –

+0

¿Puedes marcar la respuesta como correcta? – vanleeuwenbram

Respuesta

4
getActivity().getApplication() 

debería funcionar bien.

primero tiene una referencia a la actividad, a continuación, a la aplicación

La diferencia es que ahora están llamando a esta función desde un Fragmento (a pesar de que lo haya llamado "Actividad") en lugar de una actividad

+0

Según su pregunta, dice que es una actividad de fragmentación de Sherlock. Si realmente quiere decir SherlockFragment, entonces tu respuesta puede ser correcta. –

+0

"nueva Actividad es en realidad un Fragmento (Actividad de SherlockFragment, para ser precisos)." Entiendo que nombró su fragmento "SherlockFragmentActivity" – vanleeuwenbram

+0

¡Gracias, parece que se borró el error! Para que quede claro, ¿sabes por qué tengo que agregar la llamada getActivity() en este caso (desde dentro de una actividad de SherlockFragmentActivity), pero no antes (desde dentro de una actividad normal)? – gcl1

Cuestiones relacionadas