web-dev-qa-db-fra.com

Obtenir le contexte de l'application renvoie null

Le schéma suivant a été présenté comme le moyen d'obtenir le contexte d'application de n'importe où dans mon Android. Mais parfois, faire MyApp.getContext() renvoie null. J'ai essayé de changer le schéma en supprimant static de getContext() pour que je fasse MyApp.getInstance().getContext(). Il retourne toujours null. Comment résoudre ce problème? Comment puis-je obtenir le contexte de mon application de n'importe où dans mon application?

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;
    }
}
23
learner

Créez dans onCreate() une instance de getApplicationContext() (mContext) puis appelez MyApp.getContext() de partout dans votre application et vous obtiendrez statiquement le contexte de votre application.

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

N'oubliez pas de déclarer dans votre AndroidManifest.xml

<application Android:name="com.mypackage.mypackage.MyApp">
...
...
...
</application>
44
Jorgesys

Créez une instance statique de Context dans votre OnCreate et conservez-la jusqu'à ce que vous vouliez l'obtenir à partir d'une méthode getter getContext()

De la classe Application:

public class MyApp extends Application {

private static Context sContext;
@Override
public void onCreate() {
    sContext = getApplicationContext();
    super.onCreate();
}

public static Context getContext() {
    return sContext;
}
}

Déclarez-le dans votre Manifest:

<application Android:name="com.package.name.MyApp">
10
Sami Eltamawy

Utilisez la façon suivante pour obtenir le contexte de l'application.

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

    }
}

ajoutez le nom de l'application dans le fichier Manifest

<application Android:name="packagename.MyApp"/>

pour obtenir le contexte, utilisez MyApp.getInstance().getApplicationContext()

2
Ankit Yadav

instance n'est jamais initialisé et a donc une valeur par défaut de null. Cela signifie que instance.getContext() lancera un NullPointerException. Pour résoudre ce problème, vous devez initialiser la variable instance.

1
Code-Apprentice

Actuellement, vous n'avez pas initialisé l'instance et par défaut, sa valeur serait désormais définie sur null. Vous devez lui attribuer une valeur avant de pouvoir l'utiliser.

0
ucsunil