Java NullPointerException-片段问题

Java NullPointerException-片段问题,java,android,android-layout,android-activity,android-fragments,Java,Android,Android Layout,Android Activity,Android Fragments,我在尝试运行应用程序时意外收到以下NullPointer异常错误 09-22 18:30:49.053: E/AndroidRuntime(3731): FATAL EXCEPTION: main 09-22 18:30:49.053: E/AndroidRuntime(3731): Process: com.dooba.beta, PID: 3731 09-22 18:30:49.053: E/AndroidRuntime(3731): java.lang.NullPointe

我在尝试运行应用程序时意外收到以下NullPointer异常错误

09-22 18:30:49.053: E/AndroidRuntime(3731): FATAL EXCEPTION: main
    09-22 18:30:49.053: E/AndroidRuntime(3731): Process: com.dooba.beta, PID: 3731
    09-22 18:30:49.053: E/AndroidRuntime(3731): java.lang.NullPointerException
    09-22 18:30:49.053: E/AndroidRuntime(3731):     at com.dooba.beta.Fragment2$5.done(Fragment2.java:410)
    09-22 18:30:49.053: E/AndroidRuntime(3731):     at com.parse.FindCallback.internalDone(FindCallback.java:45)
    09-22 18:30:49.053: E/AndroidRuntime(3731):     at com.parse.FindCallback.internalDone(FindCallback.java:31)
    09-22 18:30:49.053: E/AndroidRuntime(3731):     at com.parse.Parse$6$1.run(Parse.java:917)
    09-22 18:30:49.053: E/AndroidRuntime(3731):     at android.os.Handler.handleCallback(Handler.java:733)
    09-22 18:30:49.053: E/AndroidRuntime(3731):     at android.os.Handler.dispatchMessage(Handler.java:95)
    09-22 18:30:49.053: E/AndroidRuntime(3731):     at android.os.Looper.loop(Looper.java:136)
    09-22 18:30:49.053: E/AndroidRuntime(3731):     at android.app.ActivityThread.main(ActivityThread.java:5017)
    09-22 18:30:49.053: E/AndroidRuntime(3731):     at java.lang.reflect.Method.invokeNative(Native Method)
    09-22 18:30:49.053: E/AndroidRuntime(3731):     at java.lang.reflect.Method.invoke(Method.java:515)
    09-22 18:30:49.053: E/AndroidRuntime(3731):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:779)
    09-22 18:30:49.053: E/AndroidRuntime(3731):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:595)
    09-22 18:30:49.053: E/AndroidRuntime(3731):     at dalvik.system.NativeStart.main(Native Method)
我的410行如下:

 mUserActivityTitleNameRetrieved2 = (TextView) getActivity().findViewById(R.id.tactivityname2);
如果您需要任何澄清,请告诉我。
提前感谢

发生这种情况是因为
getActivity()
正在返回
null
。您没有为第410行提供上下文,但我怀疑它在为片段调用
onDetach()
之前执行的方法中。有关何时可以依靠
getActivity()
返回非
null
值的更多信息,请查看生命周期文档

请注意,如果要访问“活动”的视图层次结构,在调用ActivityCreated()之前,不应执行第410行

EDIT从堆栈跟踪中可以看出,在某种解析操作完成后,在调用回调
Runnable
期间正在执行第410行。我的猜测是,解析是在后台线程中完成的,当解析完成后,它将发布一个
Runnable
,以在事件(UI)线程上执行。如果是这样,那么这个
Runnable
将在遇到它时立即执行,而不管片段生命周期中发生了什么或没有发生什么。特别是,没有什么可以阻止解析的完成,并且在调用
onActivityCreated()
(甚至
onAttach()
)之前执行
Runnable


如果是这样,那么你需要某种机制来安排事情在正确的时间发生。一种可能是在调用
onActivityCreated
时在片段中设置一个标志。然后,仅当设置了该标志时,才安排运行回拨;如果未设置,则将
Runnable
隐藏在片段内的变量中。然后返回并修改ActivityCreated上的
,以检查设置标志时是否存在隐藏的
可运行
。这有点麻烦,但我遇到过这种问题,这是我找到的最好的解决方案。

在调用findViewById()之前,我会检查getActivity()是否返回null。否则,您将在运行时收到NullPointerException。

可能意味着getActivity()的结果返回null getActivity()似乎返回null。感谢您的回复。使用getView会更好吗?感谢您的及时回复。使用getView而不是getActivity会更好吗?@user3907211-同样的原则也适用。在返回
onCreateView()
之前,不应调用
getView()
。请注意,根据文档,只有在
onAttach()
返回后才会调用
onCreateView()
。如果您解释此代码在片段的生命周期中何时执行,我们可以提供更多帮助。在这种情况下,在onActivityCreated下调用它,它位于onCreateView之前,因此应该在onCreateView之后移动onActivitycreate?@user3907211-
onActivityCreated
onCreateView
之后调用。从堆栈跟踪中可以看出,这是作为某种解析操作回调处理的一部分调用的,可能是在事件线程之外的单独线程上调用的。如果是这样,解析和片段生命周期的时间是不确定的。您可能需要使用一些内部标志来确保与UI元素的交互只在它们完全设置后发生。我使用的是一个名为Parse的后端系统,我认为它不支持多线程。我是android新手,不太熟悉内部标志,因此如果您能提供任何类型的指导,我将不胜感激。