Java NullPointerException,而nothing为null

Java NullPointerException,而nothing为null,java,android,debugging,exception,nullpointerexception,Java,Android,Debugging,Exception,Nullpointerexception,好的,这很令人沮丧 我的代码如下: accept.setBackgroundResource(R.drawable.circle_navigator_accept_checked); ViewPager vp = (ViewPager)activity.findViewById(R.id.viewpager); ViewPagerAdapter adapter = (ViewPagerAdapter)vp.getAdapter(); MyAdapter ma = (MyAdapter)(ada

好的,这很令人沮丧

我的代码如下:

accept.setBackgroundResource(R.drawable.circle_navigator_accept_checked);
ViewPager vp = (ViewPager)activity.findViewById(R.id.viewpager);
ViewPagerAdapter adapter = (ViewPagerAdapter)vp.getAdapter();

MyAdapter ma = (MyAdapter)(adapter.finalExamTypeList.getAdapter());

int selected = ma.getSelectedItem();
selected -= adapter.finalExamTypeList.getFirstVisiblePosition();
我在这行中得到了
NullPointerException

MyAdapter ma = (MyAdapter)(adapter.finalExamTypeList.getAdapter());
似乎很容易找到-无论是
adapter
还是
adapter.finalExamTypeList
都应该是
null

但是当我在调试模式下检查它时,这行中没有任何内容是真正的
null
。一切都已初始化,并且已正确初始化。此外,此
adapter.finalExamTypeList.getAdapter()
正确返回
MyAdapter
对象

所以我有点担心,但无论如何,我试着在这里创造这些条件:

accept.setBackgroundResource(R.drawable.circle_navigator_accept_checked);
ViewPager vp = (ViewPager)activity.findViewById(R.id.viewpager);
ViewPagerAdapter adapter = (ViewPagerAdapter)vp.getAdapter();

if(adapter != null) {
    if(adapter.finalExamTypeList != null) {
        if(adapter.finalExamTypeList.getAdapter() != null) {
            MyAdapter ma = (MyAdapter)(adapter.finalExamTypeList.getAdapter());

            int selected = ma.getSelectedItem();
            selected -= adapter.finalExamTypeList.getFirstVisiblePosition();
        }
    }
}
但是,
NullPointerException
仍然在同一个位置

日志:

有人知道这里发生了什么吗?

只返回适配器。除非您在其他地方初始化它,否则应该创建一个新的
ViewPagerAdapter
。另外,您似乎也没有调用任何一个,这在调用
getAdapter
之前是必需的

但当我在调试模式下检查它时,这行中没有任何内容是真正的null

有几个可能性你没有考虑过

  • 这可能是一种在调试器中无法观察到的竞争条件,因为单步执行代码时不会发生这种情况

  • 调试器中可能存在错误


    • 我设法解决了这个问题。看来是某种虫子什么的。在我重新启动eclipse几次之后,它告诉我更新我的ADT,所以我这样做了,它解决了这个问题,没有
      NullPointerException
      。魔法

      你能把logcat也贴上去吗?@Plato对不起,我刚加了它。@Marounnaroun没有那么多,没关系。:-)@蚊帐环鸟1美元。onClick@blackbelt这是我刚刚发布的代码。没有别的了,我不明白。“仅返回适配器”?是的,这就是我想要它做的,返回适配器。正如我在问题中所说的,一切都初始化了
      ViewPager.setAdapter
      调用得早得多。在你的一条评论中,你说“…没有其他东西”指的是你发布的代码。我以为你没有调用
      setAdapter
      ,因此调用
      getAdapter
      不会初始化你的
      ViewPagerAdapter
      对象。不,我说的是blackbelt想让我发布的
      onClick
      方法——这个方法中没有其他东西,但项目本身要大得多。无论如何,适配器已提前设置。谢谢您的回答。我真的不明白第一种可能性。根据第二种可能性-这就是为什么我在这些条件下检查这些东西是否为
      null
      ,但该行仍在被调用,因此我假设它们不是
      null
      。@如果使用多个线程,并且在检查运行期间另一个线程修改数据,则第一种可能性可能发生。但这不太可能发生everytime@MichaelButscher-事实上,这可能是一种比赛条件,正常行为是失败的。。。而且,只有通过单步操作将其中一个线程减慢到爬行速度,它才会成功。但这都是假设的。。。
      06-23 09:25:28.260: W/dalvikvm(1967): JNI WARNING: JNI method called with exception raised
      06-23 09:25:28.260: W/dalvikvm(1967):              in Landroid/os/Process;.setArgV0 (Ljava/lang/String;)V (GetStringCritical)
      06-23 09:25:28.260: W/dalvikvm(1967): Pending exception is:
      06-23 09:25:28.260: I/dalvikvm(1967): Ljava/lang/reflect/InvocationTargetException;:
      06-23 09:25:28.260: I/dalvikvm(1967):   at java.lang.reflect.Method.invokeNative(Native Method)
      06-23 09:25:28.260: I/dalvikvm(1967):   at java.lang.reflect.Method.invoke(Method.java:507)
      06-23 09:25:28.260: I/dalvikvm(1967):   at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839)
      06-23 09:25:28.260: I/dalvikvm(1967):   at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597)
      06-23 09:25:28.260: I/dalvikvm(1967):   at dalvik.system.NativeStart.main(Native Method)
      06-23 09:25:28.260: I/dalvikvm(1967): Caused by:
      06-23 09:25:28.260: I/dalvikvm(1967): Ljava/lang/NullPointerException;:
      06-23 09:25:28.260: I/dalvikvm(1967):   at pl.lodz.uni.myproject.CircleNavigator$1.onClick(CircleNavigator.java:99)
      06-23 09:25:28.260: I/dalvikvm(1967):   at android.view.View.performClick(View.java:2485)
      06-23 09:25:28.260: I/dalvikvm(1967):   at android.view.View$PerformClick.run(View.java:9080)
      06-23 09:25:28.260: I/dalvikvm(1967):   at android.os.Handler.handleCallback(Handler.java:587)
      06-23 09:25:28.260: I/dalvikvm(1967):   at android.os.Handler.dispatchMessage(Handler.java:92)
      06-23 09:25:28.260: I/dalvikvm(1967):   at android.os.Looper.loop(Looper.java:130)
      06-23 09:25:28.260: I/dalvikvm(1967):   at android.app.ActivityThread.main(ActivityThread.java:3683)
      06-23 09:25:28.260: I/dalvikvm(1967):   at java.lang.reflect.Method.invokeNative(Native Method)
      06-23 09:25:28.260: I/dalvikvm(1967):   at java.lang.reflect.Method.invoke(Method.java:507)
      06-23 09:25:28.260: I/dalvikvm(1967):   at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839)
      06-23 09:25:28.260: I/dalvikvm(1967):   at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597)
      06-23 09:25:28.260: I/dalvikvm(1967):   at dalvik.system.NativeStart.main(Native Method)
      06-23 09:25:28.260: I/dalvikvm(1967): "main" prio=5 tid=1 NATIVE
      06-23 09:25:28.260: I/dalvikvm(1967):   | group="main" sCount=0 dsCount=0 obj=0xb5f1bc38 self=0x9240e48
      06-23 09:25:28.260: I/dalvikvm(1967):   | sysTid=1967 nice=0 sched=0/0 cgrp=[fopen-error:2] handle=-2145907712
      06-23 09:25:28.260: I/dalvikvm(1967):   at android.os.Process.setArgV0(Native Method)
      06-23 09:25:28.260: I/dalvikvm(1967):   at android.app.ActivityThread.main(ActivityThread.java:3668)
      06-23 09:25:28.260: I/dalvikvm(1967):   at java.lang.reflect.Method.invokeNative(Native Method)
      06-23 09:25:28.260: I/dalvikvm(1967):   at java.lang.reflect.Method.invoke(Method.java:507)
      06-23 09:25:28.260: I/dalvikvm(1967):   at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839)
      06-23 09:25:28.260: I/dalvikvm(1967):   at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597)
      06-23 09:25:28.260: I/dalvikvm(1967):   at dalvik.system.NativeStart.main(Native Method)
      06-23 09:25:28.260: E/dalvikvm(1967): VM aborting