Get application context returns null

61,188

Solution 1

Create in onCreate() an instance of getApplicationContext() (mContext) then call MyApp.getContext() from everywhere in your app and you will get your application context statically.

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

Remember to declare into your AndroidManifest.xml

<application android:name="com.mypackage.mypackage.MyApp">
...
...
...
</application>

Solution 2

Create a static instance of the Context in your OnCreate and keep it till you want to get it from a getter method getContext()

From the Application class:

public class MyApp extends Application {

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

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

Declare it in your Manifest:

<application android:name="com.package.name.MyApp">

Solution 3

Use the following way to get the Application context.

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

    }
}

add the the application name inside the Manifest file

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

to get the context use MyApp.getInstance().getApplicationContext()

Solution 4

instance is never initialized and so has a default value of null. This means that instance.getContext() will throw a NullPointerException. To fix this, you need to initialize the instance variable.

Share:
61,188
learner
Author by

learner

Updated on January 13, 2020

Comments

  • learner
    learner over 4 years

    The following schema has been touted as the way to get application context from anywhere within my android app. But sometimes doing MyApp.getContext() returns null. I tried changing the schema by removing static from getContext() so that I would do MyApp.getInstance().getContext(). It still returns null. How do I fix this? How do I get my application's context from anywhere within my app?

    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;
        }
    }
    
  • learner
    learner over 10 years
    The link solved my problem. I was missing <application android:name="com.xyz.MyApplication">. Thanks.
  • learner
    learner over 10 years
    Thanks for helping. +1. I was missing <application android:name="com.xyz.MyApplication">
  • Nagaraju Gajula
    Nagaraju Gajula over 7 years
    return instance.getApplicationContext() works fine, no need to use return mContext. Particularly when calling instance.getApplicationContext() from classes outside application in some cases like database, it is preferred to pass instance as context, and then call Application context.
  • Hamid Zandi
    Hamid Zandi almost 7 years
    i have this warning "Do not place Android context classes in static fields; this is a memory leak ", how can i resolve this?
  • baldraider
    baldraider over 6 years
    @juzamn in services sometime Myapp.getContext through null pointer exception
  • Shubham AgaRwal
    Shubham AgaRwal about 5 years
    @do01 it's a application object. I don't think any leak willl affect application memory management.