2

我一直在放慢学习和构建我的第一个 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: 无法启动活动 ComponentInfo{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 Method)

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(本机方法)

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


-------------------------------------------------- ------------ 06-25 18:41:37.891: 错误/AndroidRuntime(9523): at 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: 错误/ActivityManager(99): 设置顶部应用更改失败!

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

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

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

问候
大卫

4

4 回答 4

4

好吧,正如您自己可能已经发现的那样,某些变量为空。不幸的是,您的代码中没有明显的 NullPointerException 来源。

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

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

当然,问题可能出在您ArrayAdapter的 s 上,因此您还应该检查它们,但从您的问题看来,您似乎已经这样做了。

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

于 2010-06-26T00:18:39.050 回答
3

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

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

不过,感谢 Chris 指点我查看 findViewById 上的 Null 返回值。作为安卓新手,我迷失了要开始

最好的问候大卫

于 2010-07-07T14:21:31.463 回答
1

我知道这是一个长期封闭的主题。但是我只是遇到了同样的问题,这篇文章没有回答。

我所做的,非常愚蠢。我忘了添加对 xml 的引用。IE。设置内容视图(R.layout.settings);

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

于 2012-04-30T13:17:41.690 回答
1

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

于 2013-12-10T16:48:30.860 回答