【问题标题】:android newbie question null pointer on ArrayAdapter.setAdapterArrayAdapter.setAdapter上的android新手问题空指针
【发布时间】:2010-06-25 23:32:24
【问题描述】:

我一直在放慢学习和构建我的第一个 Android 应用程序的速度。我对 java 很陌生,但已经在 C#、VB.NET(过去)、Objective-C(商店里有 6 个应用程序)和 Fortran(过去 waaaaaaaaaaaaaaaaaaaay ;)

所以我刚从海外收到了一个 htc legend(我不在美国),我买它是为了有一个体面的中级设备进行开发(它运行的是非 root 的 adnroid 2.1)

我一直在开发的应用程序是目标级别 4 (android 1.6)。它使用带有 .mp3 扩展名的 5 Mb sqlite3 数据库,以避免在 apk 中进行压缩以及从资产正确复制到系统文件夹。

在模拟器上一切正常,在设备上我看到复制数据库后应用程序的文件大小与我在模拟器上看到的完全一致。

现在,在我使用列表视图和微调器的主要活动中,我通过两个数组适配器绑定了一些数据。在设备上运行时一切顺利。但是当尝试在设备上运行这部分代码时:

public class mainAct extends Activity implements OnItemSelectedListener, TextWatcher, OnItemClickListener
{   
        /** members */
        //private EditText searchtext;
        private ListView designations;
        private ArrayAdapter<String> adapterShapes;
        private ArrayAdapter<String> adapterTypes;
        private Spinner types;
      .  
      .  
      .    
    public void onCreate(Bundle savedInstanceState)   
    {  
      .  
      .  
      .    
        // DESIGNATIONS  
        // 
        adapterShapes = new ArrayAdapter<String>(this,R.layout.list_item,shapes);       // custom TextView Adapter  
        designations=(ListView)findViewById(R.id.designations);
        Log.e("MAIN.ACCT", "ok to 172");
        designations.setAdapter(adapterShapes);
        Log.e("MAIN.ACCT", "ok to 174");
        designations.setOnItemClickListener(this);

        // TYPES
        //
        adapterTypes=new ArrayAdapter<String>(this,R.layout.spinner_item,DT.get().typesInLibrary);
        types=(Spinner)findViewById(R.id.types);
        types.setAdapter(adapterTypes);
        types.setOnItemSelectedListener(this);
      .  
      .  
      .  
    }
}

两个名称.setAdapter(adapterShapes);
& types.setAdapter(adapterTypes);

给我一​​个空指针异常。

我在mac下使用eclipse,LogCat窗口抛出:

06-25 18:41:37.842: 错误/AndroidRuntime(9523):未捕获 处理程序:线程主退出由于 未捕获的异常

06-25 18:41:37.891: 错误/AndroidRuntime(9523): java.lang.RuntimeException:无法 开始活动 组件信息{com.davidhomes.steel/com.davidhomes.steel.mainAct}: java.lang.NullPointerException

06-25 18:41:37.891: 错误/AndroidRuntime(9523):在 android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2596)

06-25 18:41:37.891: 错误/AndroidRuntime(9523):在

android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2621)

06-25 18:41:37.891: 错误/AndroidRuntime(9523):在 android.app.ActivityThread.access$2200(ActivityThread.java:126)

06-25 18:41:37.891: 错误/AndroidRuntime(9523):在 android.app.ActivityThread$H.handleMessage(ActivityThread.java:1932)

06-25 18:41:37.891: 错误/AndroidRuntime(9523):在 android.os.Handler.dispatchMessage(Handler.java:99)

06-25 18:41:37.891: 错误/AndroidRuntime(9523):在 android.os.Looper.loop(Looper.java:123)

06-25 18:41:37.891: 错误/AndroidRuntime(9523):在 android.app.ActivityThread.main(ActivityThread.java:4595)

06-25 18:41:37.891: 错误/AndroidRuntime(9523):在 java.lang.reflect.Method.invokeNative(Native 方法)

06-25 18:41:37.891: 错误/AndroidRuntime(9523):在 java.lang.reflect.Method.invoke(Method.java:521)

06-25 18:41:37.891: 错误/AndroidRuntime(9523):在 com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:860)

06-25 18:41:37.891: 错误/AndroidRuntime(9523):在 com.android.internal.os.ZygoteInit.main(ZygoteInit.java:618)

06-25 18:41:37.891: 错误/AndroidRuntime(9523):在 dalvik.system.NativeStart.main(Native 方法)

06-25 18:41:37.891: 错误/AndroidRuntime(9523):由以下原因引起: java.lang.NullPointerException


-------------------------------------------------- ------------ 06-25 18:41:37.891: 错误/AndroidRuntime(9523):在 com.davidhomes.steel.mainAct.onCreate(mainAct.java:183)

----------------------------------- ---------------

06-25 18:41:37.891: 错误/AndroidRuntime(9523):在 android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)

06-25 18:41:37.891: 错误/AndroidRuntime(9523):在 android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2544)

06-25 18:41:37.891: 错误/AndroidRuntime(9523): ... 11 更多

06-25 18:46:38.252: ERROR/ActivityManager(99): 设置失败 热门应用已更改!

第 183 行是第一个 setAdapter 调用 (designations.setAdapter(adapterShapes);),当我将其注释掉时,第二个 setAdapter 是一个破坏代码

我有点迷失了,当从模拟器和设备运行时,适配器会在日志窗口中显示正确数量的项目。

我承认自己是 java 和 android 的菜鸟,因此非常感谢任何帮助。

问候
大卫

【问题讨论】:

    标签: java android nullpointerexception android-arrayadapter oncreate


    【解决方案1】:

    好吧,您可能自己也想通了,有些变量是空的。不幸的是,您的代码中没有明显的 NullPointerException 来源。

    因此,您应该首先尝试确定哪个变量为空,从而导致异常。

    例如,findViewById 如果找不到视图,则返回 null,因此您可能需要仔细检查您的 ListViewSpinner 是否已正确初始化。

    当然,问题可能出在您的ArrayAdapters,因此您也应该检查它们,但从您的问题看来,您好像已经这样做了。

    一旦您(和我们)确切知道 NullPointerException 发生的位置,就可以更容易地提供更具体的建议

    【讨论】:

    • 嗨,克里斯,感谢您的意见,我只是再次坐下来尝试解决问题。让我失望的是模拟器上的一切都运行良好,那么如果不是某种捆绑的 sqlite3 数据库没有从资产文件夹中正确移动(并使用 pre - 现有的数据库,尤其是大于 1Mb 的数据库本身就是一个完整的主题)。无论如何,我今晚就要开始工作了,如果有人对 eclipse 上的其他调试功能有一些提示,我可能会错过,我将不胜感激。
    • 它绝对不在适配器中,它们上的 Log.e 提供了适当数量的元素(因此它们确实是从数据库中填充的) Log.e("SHAPES SIZE",String.format ("%d",shapes.size()));给出:06-25 21:14:52.701:错误/形状大小(11447):1973
    • 克里斯,你是对的,我的 ListView 名称:: designations=(ListView)findViewById(R.id.designations); if(designations==null) { Log.e("designation null :: ","null"); } 抛出一个错误。我仍然不知道为什么它在模拟器上运行良好
    • 您提到您的设备运行的是 2.1,但您的目标是 1.6。您是使用 2.1 模拟器来匹配您的设备,还是使用 1.6 模拟器来匹配您的目标 API 级别?
    • 克里斯,正如你所提到的,我在模拟器上使用 1.6,因为这实际上是我的目标 minSDK 版本,但我将立即在 2.1 的新 avd 上对其进行测试。不幸的是,我将在一个短暂的周末休闲旅行中离开,最早要到周日晚些时候才能再次工作。
    【解决方案2】:

    哎呀!一直都是我的错,不知何故我有两种布局(一种用于不同的分辨率),我的设备上使用的一种没有正确的 ListView 和 Spinner ID。那个替代布局被折叠到一个文件夹中,我只是忘记了它(我已经暂停了应用程序的开发大约 2 个月,直到我真正得到了一个可以测试的设备)。

    工作正常的一个是在模拟器上安装,但不是在设备上,反之亦然,很奇怪,因为好的一个与我的设备的分辨率相匹配(我很确定我在那里也遗漏了一些东西,但这并不重要现在)

    不过,感谢 Chris 指点我查看 findViewById 上的 Null 返回值。刚接触 android 我迷失了要开始

    最好的问候 大卫

    【讨论】:

      【解决方案3】:

      我知道这是一个长期封闭的主题。但是我刚刚遇到了同样的问题,这个帖子没有回答。

      我所做的非常愚蠢。我忘了添加对 xml 的引用。 IE。 setContentView(R.layout.settings);

      实际上看起来原来的帖子可能也忘记了这一点,所以我想我会发布它。 干杯。

      【讨论】:

        【解决方案4】:

        我遇到了同样的问题。我将 Log.d 消息放入打印出每个对象。原来我的 ListView 对象是“null”。原因是我的 SetContentView 中列出了错误的 XML 活动。我认为调试此问题的最简单方法是继续输入 Log.d 消息,直到找到“null”的对象/变量。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2012-08-15
          • 1970-01-01
          • 2010-10-13
          • 2018-11-19
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多