tag - how to know which fragment is visible in android
Obtener contexto de aplicaciĆ³n devuelve null (5)
El siguiente esquema se ha promocionado como la forma de obtener el contexto de la aplicación desde cualquier lugar dentro de mi aplicación para Android. Pero a veces haciendo MyApp.getContext()
devuelve null. Intenté cambiar el esquema eliminando la static
de getContext()
para que hiciera MyApp.getInstance().getContext()
. Todavía devuelve nulo. ¿Cómo puedo solucionar esto? ¿Cómo obtengo el contexto de mi aplicación desde cualquier lugar dentro de mi aplicación?
public class MyApp extends Application {
private static MyApp instance;
public static MyApp getInstance() {
return instance;
}
public static Context getContext() {
return instance.getApplicationContext();
}
@Override
public void onCreate() {
super.onCreate();
instance = this;
}
}
Actualmente, no ha inicializado la instancia y, de forma predeterminada, su valor ahora se establecerá en nulo. Debe asignarle un valor antes de poder usarlo.
Cree en onCreate()
una instancia de getApplicationContext()
( mContext
), luego llame a MyApp.getContext()
desde cualquier lugar de su aplicación y obtendrá el contexto de su aplicación de forma estática.
public class MyApp extends Application {
//private static MyApp instance;
private static Context mContext;
public static MyApp getInstance() {
return instance;
}
public static Context getContext() {
// return instance.getApplicationContext();
return mContext;
}
@Override
public void onCreate() {
super.onCreate();
// instance = this;
mContext = getApplicationContext();
}
}
Recuerde declarar en su AndroidManifest.xml
<application android:name="com.mypackage.mypackage.MyApp">
...
...
...
</application>
Cree una instancia estática del Context
en su OnCreate
y manténgala hasta que desee obtenerla de un método getContext()
De la clase de Application
:
public class MyApp extends Application {
private static Context sContext;
@Override
public void onCreate() {
sContext = getApplicationContext();
super.onCreate();
}
public static Context getContext() {
return sContext;
}
}
Declara en tu Manifest
:
<application android:name="com.package.name.MyApp">
Utilice la siguiente manera para obtener el contexto de la aplicación.
public class MyApp extends Application {
private static MyApp mAppInstance=null;
public static Context appContext;
public static MyApp getInstance() {
return mAppInstance;
}
public static MyApp get() {
return get(appContext);
}
public static MyApp get(Context context) {
return (MyApp) context.getApplicationContext();
}
@Override
public void onCreate() {
super.onCreate();
mAppInstance=this;
appContext=getApplicationContext();
}
}
agrega el nombre de la aplicación dentro del archivo Manifest
<application android:name="packagename.MyApp"/>
para obtener el contexto use MyApp.getInstance().getApplicationContext()
instance
nunca se inicializa y, por lo tanto, tiene un valor predeterminado de null
. Esto significa que instance.getContext()
lanzará una NullPointerException
. Para arreglar esto, necesita inicializar la variable de instance
.