0

以下代码在执行期间导致空指针异常。它只是说空指针异常。

当我将 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();
    }
}
4

2 回答 2

0

在此处检查问题

解析度:

我猜你的类路径上有 gson.jar 和 gson-stream.jar;那是行不通的。

问题在于,在 Gson 2.1 中,我们有一个自定义版本的 JsonReader,它添加了一些秘密钩子以使 MapTypeAdatperFactory 更快;这些钩子不适用于 gson-stream.jar 的 JsonReader 版本。

于 2012-09-26T10:22:13.370 回答
0

我想我明白这里可能会发生什么。

问题在于它HotItem是一个内部类,这意味着它具有对封闭类实例的隐式引用。但是当该gsonAdapter.fromJson方法尝试创建 . 时List<HotItem>,它没有(可能没有)用于创建HotItem. 根据它的创建方式,它可能会使用null引用来创建它……这可能是 NPE 的原因。

如果这个(或类似的东西)是问题,那么另一种解决方法是声明HotItem为一个static类。


我还应该指出,以小写字母开头的类名是不好的风格。

于 2012-09-26T11:23:40.673 回答