gpt4 book ai didi

java - getApplicationContext() 处的空指针异常

转载 作者:行者123 更新时间:2023-12-02 05:15:22 26 4
gpt4 key购买 nike

我正在尝试获取用户的位置,这似乎给我带来了麻烦。当我调用 distanceBetween() 来查看测试是否正常工作时,我在 getApplicationContext() 处收到 NullPointerException。有什么我没有做的吗?

这是堆栈跟踪:

java.lang.NullPointerException at android.content.ContextWrapper.getApplicationContext(ContextWrapper.java:109) at com.ayy.zz.DistanceFinder.onCreate(DistanceFinder.java:38) at com.ayy.zz.DistanceFinder.distanceBetween(DistanceFinder.java:82) at com.ayy.zz.DistanceFinderTests.testSomething(DistanceFinderTests.java:14) at java.lang.reflect.Method.invokeNative(Native Method) at student.TestCase.runBare(TestCase.java:108) at android.test.AndroidTestRunner.runTest(AndroidTestRunner.java:191) at android.test.AndroidTestRunner.runTest(AndroidTestRunner.java:176) at android.test.InstrumentationTestRunner.onStart(InstrumentationTestRunner.java:554) at android.app.Instrumentation$InstrumentationThread.run(Instrumentation.java:1701)

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

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

最佳答案

您不能简单地调用 onCreate 来获取上下文。目前尚不清楚您要做什么或何时调用 distanceBetween 但显然是在 Android“创建”Activity 之前的某个时间。 (What is 'Context' on Android?)

此外,您的 mContext 不应该是静态的,尽管这是允许的,但这将使您即使在未创建实例时也可以访问该变量,同时也会给您一个 NPE。

当您访问Context时,您需要确保Android实际上已经为您的对象创建/传递了一个上下文。在这种情况下,必须先“启动” Activity ,然后才能获得上下文。 ServiceBroadcastReceiver 类也是如此。

这里有四种获取Context的解决方案 -

  1. 将其传递到方法调用中,如下所示:
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);
}
  • 仅在 Android 创建 Activity 后调用您的方法(而不是通过调用 onCreate()

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

  • http://www.vogella.com/tutorials/AndroidServices/article.html

  • 请谨慎考虑使用 Application 类,该类应在您的应用运行时随时可访问。
  • 关于java - getApplicationContext() 处的空指针异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27001919/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com