Java getApplicationContext()处的nullpointerexception

Java getApplicationContext()处的nullpointerexception,java,android,Java,Android,我试图获取用户的位置,这似乎给我带来了麻烦。 当我调用distanceBetween()查看测试是否有效时,我在getApplicationContext()处得到一个NullPointerException。有什么我没有做的吗 以下是Stacktrace: 位于的java.lang.NullPointerException android.content.ContextWrapper.getApplicationContext(ContextWrapper.java:109) 在 com.ay

我试图获取用户的位置,这似乎给我带来了麻烦。 当我调用
distanceBetween()
查看测试是否有效时,我在
getApplicationContext()
处得到一个NullPointerException。有什么我没有做的吗

以下是Stacktrace:

位于的java.lang.NullPointerException android.content.ContextWrapper.getApplicationContext(ContextWrapper.java:109) 在 com.ayy.zz.DistanceFinder.onCreate(DistanceFinder.java:38) 在 DistanceFinder.distanceBetween(DistanceFinder.java:82) 在 testSomething(DistanceFinderTests.java:14) 位于java.lang.reflect.Method.Invokenactive(本机方法) runBare(TestCase.java:108)位于 android.test.AndroidTestRunner.runTest(AndroidTestRunner.java:191)位于 android.test.AndroidTestRunner.runTest(AndroidTestRunner.java:176)位于 onStart(InstrumentationTestRunner.java:554) 在 android.app.Instrumentation$InstrumentationThread.run(Instrumentation.java:1701)

TestSomething只是初始化DistanceFinder并调用distanceBetween方法:

    public double distanceBetween()
    {
        onCreate();
        return dining1.distanceTo(dining2);
    }

您不能简单地调用
onCreate
来获取上下文。现在还不清楚你想做什么,或者何时调用
distance-between
,但很明显,这是在Android“创建”活动之前。()

此外,您的
mContext
不应该是静态的,尽管这是允许的,但即使没有创建实例,您也可以通过它访问变量,同时还可以使用NPE

当您访问
Context
时,您需要确保Android确实为您的对象创建/传递了一个上下文。在这种情况下,必须先“启动”活动,然后才能创建上下文。这同样适用于
服务
广播接收器

以下是获取
上下文的四种解决方案-

  • 将其传递到方法调用中,如下所示:
  • 只有在Android创建活动后才调用您的方法(而不是通过调用
    onCreate()
    jsut)

  • 创建
    服务
    并将您的请求传递给该服务,并使用其
    上下文

  • <>请慎重考虑使用<代码>应用程序>代码>类,在应用程序运行的任何时候都应该是可访问的。
    任何时候抛出异常,都要发布该异常的stacktrace。您扩展应用程序的任何特定原因?我认为这是必需的。很抱歉,我对这一点很陌生。我将删除该异常并重试。实际上,我需要扩展应用程序以使用getSystemService()。请不要破坏您的帖子。
    public double distanceBetween(Context mContext)
    {
        locationManager = (LocationManager) mContext
            .getSystemService(Context.LOCATION_SERVICE);
        dining1 = new Location("");
        dining1.setLatitude(37.226500);
        dining1.setLongitude(-80.419179);
        dining2 = new Location("");
        dining2.setLatitude(37.229219);
        dining2.setLongitude(-80.418310);
        return dining1.distanceTo(dining2);
    }