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