如何获取应用程序上下文并返回NULL?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (26)

下面的模式已被吹捧为从android应用程序中的任何地方获取应用程序上下文的方式。但有时候做MyApp.getContext()返回null。我试图通过删除static来改变模式,getContext()这样我就可以做到MyApp.getInstance().getContext()。它仍然返回null。我该如何解决?如何从应用程序的任何位置获取应用程序的上下文?

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;
    }
}
提问于
用户回答回答于

在()中创建onCreate()一个实例,然后 在应用程序中的任意位置调用,并且你将静态获取应用程序上下文。getApplicationContext()mContextMyApp.getContext()

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

记得声明AndroidManifest.xml

<application android:name="com.mypackage.mypackage.MyApp">
...
...
...
</application>
用户回答回答于

Context在你的创建一个静态实例,OnCreate保持它,直到你想从getter方法得到它getContext()

Application类上:

public class MyApp extends Application {

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

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

在你的Manifest

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

扫码关注云+社区