Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/384.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 为什么getcontext()只在一个方法中为null?_Java_Android_Google Maps_Android Fragments_Drawerlayout - Fatal编程技术网

Java 为什么getcontext()只在一个方法中为null?

Java 为什么getcontext()只在一个方法中为null?,java,android,google-maps,android-fragments,drawerlayout,Java,Android,Google Maps,Android Fragments,Drawerlayout,您好,我正在制作一个地图应用程序,它位于Android Studio的抽屉活动中,一切都进行得很顺利,直到我开始玩碎片,因为我是Android新手,我真的不知道发生了什么,也不知道问题的原因是什么 我将主布局替换为地图布局,使其成为我的“家”布局。然后我添加了一个片段,我可以在其中更改应用程序的语言“配置”,当按下抽屉菜单上的“配置”按钮时,我调用该片段 我注意到,尽管配置片段替换了地图布局,但地图片段中的一些位置方法在后台仍处于活动状态,我知道这一点,因为每次应用程序检查权限或更改位置时,都会

您好,我正在制作一个地图应用程序,它位于Android Studio的抽屉活动中,一切都进行得很顺利,直到我开始玩碎片,因为我是Android新手,我真的不知道发生了什么,也不知道问题的原因是什么

我将主布局替换为地图布局,使其成为我的“家”布局。然后我添加了一个片段,我可以在其中更改应用程序的语言“配置”,当按下抽屉菜单上的“配置”按钮时,我调用该片段

我注意到,尽管配置片段替换了地图布局,但地图片段中的一些位置方法在后台仍处于活动状态,我知道这一点,因为每次应用程序检查权限或更改位置时,都会显示一条Toast消息。我这样做是为了直观地了解它的工作情况

有两种情况下,我的应用程序因同一行代码中的同一错误而崩溃,而这恰好是我在那里作为帮助的祝酒词之一。这对我来说很奇怪,因为所有其他toast都工作正常,因为消息正在显示,但当它在onLocationChanged方法中到达特定toast时,下一个错误将显示:

java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.String android.content.Context.getPackageName()' on a null object reference
    at android.widget.Toast.<init>(Toast.java:114)
    at android.widget.Toast.makeText(Toast.java:277)
    at android.widget.Toast.makeText(Toast.java:267)
    at com.tesseract.psiclops.zerov2.mapFragment.onLocationChanged(mapFragment.java:172)
    at com.google.android.gms.internal.location.zzay.notifyListener(Unknown Source:4)
    at com.google.android.gms.common.api.internal.ListenerHolder.notifyListenerInternal(Unknown Source:8)
    at com.google.android.gms.common.api.internal.ListenerHolder$zza.handleMessage(Unknown Source:16)
    at android.os.Handler.dispatchMessage(Handler.java:105)
    at android.os.Looper.loop(Looper.java:164)
    at android.app.ActivityThread.main(ActivityThread.java:6541)
    at java.lang.reflect.Method.invoke(Native Method)
    at com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:240)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:767)
mapfragment方法中的所有其他祝酒词都工作正常


如果你需要更多的代码,请在这里问我,我会为你添加它。提前非常感谢

在片段中声明上下文变量

private Context mContext;
从onAttach()初始化它

}

敬酒

  Toast.makeText(mContext,getString(R.string.toast) , Toast.LENGTH_LONG).show();
getContext()
仅当片段附加到其包含活动时返回非空值-介于
onAttach()
onDetach()之间。如果回调发生在这些事件之外,那么您没有适当地清理侦听器

您最早应该创建侦听器(即调用
requestLocationUpdates()
)的是
onAttach()

然后必须在
ondeach()
中注销侦听器(即调用),以防止泄漏LocationListener和整个片段


通常,只有在屏幕上可以看到片段时,才应该请求更新。在这种情况下,您将在
onStart()
中注册,并在
onStop()中注销

这些代码是否真的是重现问题所必需的?请阅读,在最小的压力。可能重复的哦对不起,我只是想在这里有所有的信息,我会编辑,然后添加更多的代码,如果有人要求我,谢谢!我想你误解了我的评论。您的代码仍然需要完成。这一编辑实际上让情况变得更糟,因为现在已经完全没有任何关于正在发生什么的信息了。请仔细阅读,并创建一个实际最小且完整的示例。基本上,我们希望您完成调试代码的基础工作,并将问题缩小到重现代码所需的绝对最小值。我的建议是创建一个新项目,并添加/删除部分代码,直到可以用最少的代码重现问题。原因有二:一,。通过这样做,你很有可能自己找到原因和解决方案。2.当用这样一个缩小的例子发布一个问题时,其他用户也不必做基础工作,这样可以更快更有效地帮助你。哇,你做到了!现在可以工作了!!你能解释一下为什么会这样吗?我是否应该将所有的“getcontext()”改为一个变量?片段的生命周期工作方式不同,要获得执行此操作或调用getApplicationContext()所需的上下文,您可以接受我的答案,如果它对您有效。如果这对您有效,那么你完全是在泄露你的上下文,让你的LocationListener比你的片段存活的时间更长。我会接受它,尽管我仍然怀疑为什么那个特定的toast会崩溃,而不是其他的….@ianhanniballake我想我完全是在这样做,你能给我指出一些我可以阅读的文档来避免这种情况吗?或者你愿意解释一下吗?这里没什么,谢谢!非常感谢你!这给了我更多的视角,我想我知道如何寻找我现在需要的信息,谢谢!
private Context mContext;
 @Override
 public void onAttach(Context context) {
 super.onAttach(context);
 mContext = context;
  Toast.makeText(mContext,getString(R.string.toast) , Toast.LENGTH_LONG).show();