【发布时间】:2011-02-03 17:31:58
【问题描述】:
我有一个应用程序(虽然我不确定为什么)至少需要 Android 2.2 才能运行,所以在我的手机上安装了 Froyo 后,我测试了该应用程序,虽然它安装并开始运行,但当我执行一个函数,结果如下错误:
“应用程序意外停止。请重试。”
它在同样运行 Froyo 的模拟器上运行良好,所以我无法弄清楚问题出在哪里。 adb logcat 报错如下:
W/dalvikvm(1027): threadid=1: 线程以未捕获的异常退出 (group=0x2aacc8a0)
它给出了一个空指针异常,除了我知道没有空指针异常,因为它在模拟器中工作正常,我可以从 adb logcat 中的 System.out 看到该值不会为空.
有人知道我可以做些什么来解决这个问题吗?
感谢您的宝贵时间!
编辑:这是所要求的堆栈:
W/dalvikvm(861): threadid=1: 线程以未捕获的异常退出 (group=0x2aacc8a0) E/AndroidRuntime(861):致命异常:主要 E/AndroidRuntime(861):java.lang.NullPointerException E/AndroidRuntime(861):在 com.andrWow.wCraftArmory.Armory.updateUI(Armory.java:150) E/AndroidRuntime(861):在 com.andrWow.wCraftArmory.Armory.access$2(Armory.java:140) E/AndroidRuntime(861):在 com.andrWow.wCraftArmory.Armory$carryOutSearch.onPostExecute(Armory.java:282) E/AndroidRuntime(861):在 com.andrWow.wCraftArmory.Armory$carryOutSearch.onPostExecute(Armory.java:1) E/AndroidRuntime(861):在 android.os.AsyncTask.finish(AsyncTask.java:417) E/AndroidRuntime(861):在 android.os.AsyncTask.access$300(AsyncTask.java:127) E/AndroidRuntime(861):在 android.os.AsyncTask$InternalHandler.handleMessage(AsyncTask.java:429) E/AndroidRuntime(861): 在 android.os.Handler.dispatchMessage(Handler.java:99) E/AndroidRuntime(861):在 android.os.Looper.loop(Looper.java:123) E/AndroidRuntime(861): 在 android.app.ActivityThread.main(ActivityThread.java:4627) E/AndroidRuntime(861): 在 java.lang.reflect.Method.invokeNative(Native Method) E/AndroidRuntime(861):在 java.lang.reflect.Method.invoke(Method.java:521) E/AndroidRuntime(861):在 com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:876) E/AndroidRuntime(861):在 com.android.internal.os.ZygoteInit.main(ZygoteInit.java:634) E/AndroidRuntime(861):在 dalvik.system.NativeStart.main(本机方法) W/ActivityManager(123):强制完成活动 com.andrWow.wCraftArmory/.Armory
这是第 150 行附近的代码 - 第二行是第 150 行:
PlayerCharacter toon = worker.getToons().get(latestToon[0] + "&" + latestToon[1]);
LinkedHashMap<String, LinkedHashMap<String, String>> bM = toon.getCategoryMap("baseStats");
只有当分配“toon”的结果不为空时,它才会走到这一步。使用该键的 getCategoryMap 的结果也不应该为空,因为在创建时使用该键添加值几乎是硬编码的。 getCategoryMap 是一个 getter,它检查 HashMap 是否包含该键,如果没有,它会给 system.out 一个不存在的错误。
已解决编辑:
感谢大家的帮助。 我真的不认为代码有问题,因为我知道它可以在模拟器上运行,并且我也让它在手机上运行过一次,但事实证明这是我的代码有问题。获得 FroYo 后,我对其进行了设置,其中包括添加一个新键盘,该键盘会自动更改第一个字母的大小写,所以这是我没有正确处理大写/小写的问题 - 一个愚蠢的错误。
感谢您的宝贵时间,非常感谢!
【问题讨论】:
-
嗨,Dave 发布您的堆栈跟踪的更多信息
-
是的,我们需要更多信息。但是,当您使用模拟器和真实设备时(iPhone、Android、Blackberry、WP7 等都是如此),当应用程序在一个地方工作但在另一个地方不能工作时,这并不奇怪。当两者都能正常工作时,这更令人惊讶。
-
当虚拟机抛出空指针异常时,你不能确定没有空指针异常。显然某处有一个空指针。
-
感谢您的所有反馈,尽管我不确定它会有多大帮助,但我已经发布了异常堆栈。是的,我猜你对空指针的存在是正确的,我应该说我不知道它怎么会是空的。
-
@Dave 您需要向我们展示围绕空指针异常的代码行,例如 Armory.java 的 150 行。请指出具体是哪一行代码。
标签: android eclipse exception emulation android-2.2-froyo