我一直在放慢学习和构建我的第一个Android应用程序。我是非常新的java,但已经在C#,VB.NET(当天回来),Objective-C(商店里有6个应用程序)和Fortran(当天回来的waaaaaaaaaaaaaaaaaaaay)中完成了几个项目。 / p>
所以我刚刚从海外收到一个htc传奇(我不在美国),我为了拥有一个体面的中级设备进行开发而购买(它运行的是非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):未捕获 handler:thread main由于退出 未被捕的例外
06-25 18:41:37.891: ERROR / AndroidRuntime(9523): java.lang.RuntimeException:无法 开始活动 ComponentInfo {com.davidhomes.steel / com.davidhomes.steel.mainAct}: java.lang.NullPointerException
06-25 18:41:37.891: 错误/ AndroidRuntime(9523):at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2596)
06-25 18:41:37.891: ERROR / AndroidRuntime(9523):at
android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2621)
06-25 18:41:37.891: 错误/ AndroidRuntime(9523):at android.app.ActivityThread.access $ 2200(ActivityThread.java:126)
06-25 18:41:37.891: 错误/ AndroidRuntime(9523):at android.app.ActivityThread $ H.handleMessage(ActivityThread.java:1932)
06-25 18:41:37.891: 错误/ AndroidRuntime(9523):at android.os.Handler.dispatchMessage(Handler.java:99)
06-25 18:41:37.891: 错误/ AndroidRuntime(9523):at android.os.Looper.loop(Looper.java:123)
06-25 18:41:37.891: 错误/ AndroidRuntime(9523):at android.app.ActivityThread.main(ActivityThread.java:4595)
06-25 18:41:37.891: 错误/ AndroidRuntime(9523):at java.lang.reflect.Method.invokeNative(母语 方法)
06-25 18:41:37.891: 错误/ AndroidRuntime(9523):at java.lang.reflect.Method.invoke(Method.java:521)
06-25 18:41:37.891: 错误/ AndroidRuntime(9523):at com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:860)
06-25 18:41:37.891: 错误/ AndroidRuntime(9523):at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:618)
06-25 18:41:37.891: 错误/ AndroidRuntime(9523):at 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):at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
06-25 18:41:37.891: 错误/ AndroidRuntime(9523):at 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的菜鸟,所以任何帮助都非常受欢迎。
问候
大卫
答案 0 :(得分:4)
好吧,你可能已经想到了自己,有些变量是空的。不幸的是,代码中没有明显的NullPointerException源。
因此,您应首先尝试识别哪个变量为null,从而导致异常。
例如,findViewById如果无法找到该视图,则返回null,因此您可能需要仔细检查ListView
和Spinner
是否正确初始化。
当然,问题可能出在你的ArrayAdapter
上,所以你也应该检查它们,但是从你的问题来看,听起来好像你已经这样做了。
一旦您(和我们)确切知道NullPointerException正在发生的位置,就会更容易提供更具体的建议
答案 1 :(得分:3)
糟糕!一直是我的错,不知何故,我有两个布局(一个用于不同的分辨率),我的设备上使用的布局没有正确的ListView和Spinner ID。这个替代布局被折叠到一个文件夹中,我只是忘记了它(我暂停了应用程序的开发大约2个月,直到我真正有一个设备进行测试)。
一个正常的工作是在模拟器上安装但不在设备上安装,反之亦然,奇怪的是,好的一个与我的设备的分辨率相匹配(我很确定我也错过了那里的东西,但这并不重要现在)
仍然,感谢Chris指示我查看findViewById上的Null返回值。作为Android的新手,我开始迷失了
祝你好运 大卫
答案 2 :(得分:1)
我知道这是一个长期封闭的主题。但是我遇到了同样的问题,这篇文章没有回答。
我做了什么,非常愚蠢。我忘了添加对xml的引用。即。的setContentView(R.layout.settings);
实际上看起来原来的帖子可能也忘了这个,所以我想我会发布它。 欢呼声。答案 3 :(得分:1)
我遇到了同样的问题。我把Log.d消息打印出每个对象。事实证明我的ListView对象是“null”。原因是我的SetContentView中列出了错误的XML活动。我认为调试此问题的最简单方法是继续输入Log.d消息,直到找到“null”的对象/变量。