获取应用程序上下文返回null

时间:2014-02-24 17:25:29

标签: android applicationcontext

以下架构被吹捧为从我的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;
    }
}

6 个答案:

答案 0 :(得分:44)

onCreate()中创建getApplicationContext()mContext)的实例,然后从应用中的任何位置调用MyApp.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>

答案 1 :(得分:9)

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">

答案 2 :(得分:2)

使用以下方法获取应用程序上下文。

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

    }
}

清单文件

中添加应用程序名称
<application android:name="packagename.MyApp"/>

获取上下文使用 MyApp.getInstance().getApplicationContext()

答案 3 :(得分:1)

instance永远不会被初始化,因此默认值为null。这意味着instance.getContext()会抛出NullPointerException。要解决此问题,您需要初始化instance变量。

答案 4 :(得分:0)

目前,您尚未初始化实例,默认情况下,它的值现在将设置为null。您需要在使用它之前为其指定一个值。

答案 5 :(得分:0)

另一个根本原因是由于错误的备份过程。请参阅

Why backup related process might cause Application's onCreate is not executed?