以下代码在执行期间导致空指针异常。它只是说空指针异常。
当我将hotItem类放在函数之外时,它没有任何问题。
一旦我将它放入函数中,它将导致空指针异常。
我只是想知道为什么会发生这种情况以及函数内部类的生命周期是什么。
private void getHotItem()
{
Gson gsonAdapter = new Gson();
class hotItem
{
private String hotItemPK = "";
}
Type hotItemType = new TypeToken<List<hotItem>>(){}.getType();
List<hotItem> hotItemList = new ArrayList<hotItem>();
try
{
itemAccess.getHotItemList();
itemAccess.start();
itemAccess.join();
hotItemList = gsonAdapter.fromJson(returnData, hotItemType);
if(!hotItemList.isEmpty())
{
testText.setText(hotItemList.get(0).hotItemPK.toString());
}
}
catch (InterruptedException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
}
答案 0 :(得分:0)
请检查问题here
分辨率:
我猜测你的类路径上有gson.jar和gson-stream.jar;那不会起作用。
问题是在Gson 2.1中我们有一个JsonReader的自定义版本,它添加了一些秘密钩子以使MapTypeAdatperFactory更快;这些钩子不能使用gson-stream.jar的JsonReader版本。
答案 1 :(得分:0)
我想我明白这里可能会发生什么。
问题是HotItem
是一个内部类,这意味着它有一个隐式引用封闭类的实例。但是当gsonAdapter.fromJson
方法尝试创建List<HotItem>
时,它没有(可能没有)创建HotItem
的封闭类的实例。根据它的创建方式,可能会使用null
引用创建它......这可能是NPE的原因。
如果这是(或类似的)问题,那么另一种方法是将HotItem
声明为static
类。
我还应该指出,用小写字母开始一个类名是很糟糕的。