谁能告诉我为什么下面这行代码会抛出一个NullPointer。
public List<ApplicationInfo> getAppInfos(Context myContext) {
PackageManager pm = myContext.getPackageManager();
List<ApplicationInfo> appInfo = pm.getInstalledApplications(PackageManager.GET_META_DATA);
Collections.sort(appInfo, new ApplicationInfo.DisplayNameComparator(pm)); //throws Nullpointer
return appInfo;
}我尝试从单独的线程(而不是UIThread)调用此方法。但我从我的活动中传递了上下文...如果我从我的活动中调用这个方法(当然不需要传递上下文),它工作得很好。
我很感谢你的帮助。
关于评论的更新:
感谢您的回复。这是一件棘手的事情。因为代码在带有API 17的Emulator上运行得很好,但不能在我的真实设备上运行。我得到了一个很酷的Alcatel手机,对我来说,让它运行usb调试真的很棘手(我认为不仅仅是对我来说,它的支持很糟糕)。在某些情况下,我也实现了在Emulator上使应用程序崩溃。我只记得一个nullpointerexception,但也许我把什么搞混了。但我能说的是,当我评论Collections.sort的时候...出去吧。该应用程序也可以在设备上运行。我很抱歉现在让你这么困惑。我唯一能说的是,这行代码会使我的应用程序在我的设备上崩溃,但不会在我的Emulator上崩溃,而且只有当我从单独的线程调用它时才会。
我像这样实例化上下文:
final Context myContext = MyActivity.this;在Thread中,我只需像这样调用方法:
List<ApplicationInfo> myList = getAppInfos(myContext);PHONE和Emulator正在运行相同的Android版本!
发布于 2014-11-20 04:27:38
您将获得nullPointerException,因为pm in:
PackageManager pm = myContext.getPackageManager();
正在返回null。在不了解如何获得上下文的情况下,很难说出为什么有时是null,有时不是。
https://stackoverflow.com/questions/27026156
复制相似问题