我有一个应用程序(尽管我不确定为什么)至少需要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):at 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(本机方法)
E / AndroidRuntime(861):at java.lang.reflect.Method.invoke(Method.java:521)
E / AndroidRuntime(861):at 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的结果也不应为null,因为在创建键时使用该键添加值几乎是硬编码的。 getCategoryMap是一个getter,它检查HashMap是否包含该键,如果不包含,则会向system.out中提供错误,该错误不存在。
解决了编辑:
谢谢大家的帮助。
我真的不认为代码有问题,因为我知道它可以在模拟器上运行,并且我也可以在电话上运行一次,但是事实证明这是我的代码有问题。获得FroYo之后,我对其进行了设置,其中包括添加一个新键盘,该键盘会自动更改首字母的大小写,因此,我不能正确处理大小写是一个愚蠢的错误。
感谢您的宝贵时间,非常感谢!
最佳答案
好吧,显而易见的答案是PlayerCharacter toon = worker.getToons().get(latestToon[0] + "&" + latestToon[1]);
返回null。
要弄清楚为什么可以将其分解为几个步骤。 latestToon[0] + "&" + latestToon[1]
给您什么?是您所期望的吗?我假设getToons()
返回某种映射?它的内容是什么?