检索包中的图标失败

时间:2011-10-24 08:49:08

标签: android exception

我的Android应用程序最近显示了一些奇怪的行为。下面包含的NullPointerException仅在特定设备上抛出,例如带有Android 2.3.4的Motorola Defy设备会产生此异常。虽然它在Froyo 2.3.6 Nexus One和2.2上运行良好。 HTC Desire,以及Honeycomb平板设备。有趣的是,我不会在代码中的任何地方访问AppIcon。这是由Motorola Defy抛出的Stack跟踪:

W/PackageManager(14947): Failure retrieving icon 0x7f020004 in package com.a.project
W/PackageManager(14947): java.lang.NullPointerException
W/PackageManager(14947):    at android.app.ActivityThread$ResourcesKey.<init>(ActivityThread.java:1138)
W/PackageManager(14947):    at android.app.ActivityThread.getTopLevelResources(ActivityThread.java:1207)
W/PackageManager(14947):    at android.app.ActivityThread.getTopLevelResources(ActivityThread.java:1266)
W/PackageManager(14947):    at android.app.ContextImpl$ApplicationPackageManager.getResourcesForApplication(ContextImpl.java:2439)
W/PackageManager(14947):    at android.app.ContextImpl$ApplicationPackageManager.getDrawable(ContextImpl.java:2332)
W/PackageManager(14947):    at android.content.pm.PackageItemInfo.loadIcon(PackageItemInfo.java:140)
W/PackageManager(14947):    at android.app.ContextImpl$ApplicationPackageManager.getApplicationIcon(ContextImpl.java:2387)
W/PackageManager(14947):    at com.motorola.filemanager.utils.IconifiedText.buildIconItem(IconifiedText.java:287)
W/PackageManager(14947):    at com.motorola.filemanager.local.DirectoryScanner.run(DirectoryScanner.java:83)

在做了一些研究后,我发现以下文章,导致没有具体答案,可能是导致问题的原因:
http://code.google.com/p/android/issues/detail?id=9151

我确保在清单文件中设置以下权限:

android.permission.WRITE_EXTERNAL_STORAGE

我在代码中访问PackageManager的唯一地方是versionName retreival目的:

try {
    PackageManager manager = context.getPackageManager();
    return manager.getPackageInfo(context.getPackageName(), 0).versionCode;
} catch (Exception e) {
    e.printStackTrace();
}

是否有人知道可能导致此问题的原因?

最好的问候,
米蒂亚

2 个答案:

答案 0 :(得分:2)

空指针异常位于

om.motorola.filemanager.utils.IconifiedText.buildIconItem(IconifiedText.java:287).
android.content.pm.PackageItemInfo.loadIcon(PackageItemInfo.java:140). 

所以我想你的项目在某个地方加载了apk的图标。在loadIcon之前,您应该添加以下两行:

pkg.applicationInfo.sourceDir = "apkpath";  //"apkpath" is your apk's absolute path
pkg.applicationInfo.publicSourceDir = "apkpath";

答案 1 :(得分:0)

之前你回来.... 加: PackageInfo packageInfo = getPackageManager(context).getPackageInfo(context.getPackageName(),0); packageinfo.applicationInfo.sourceDir = mSavePath +“/”+ APKNAME; //你的apk绝对 packageinfo.applicationInfo.publicSourceDir = mSavePath +“/”+ APKNAME; //你的apk绝对

相关问题