Java 在函数内初始化,导致空指针异常
以下代码在执行期间导致空指针异常。它只是说空指针异常 当我将hotItem类放在函数之外时,它可以正常工作 一旦我将其放入函数中,它将导致空指针异常 我只是想知道为什么会发生这种情况,以及函数中类的生命周期是什么Java 在函数内初始化,导致空指针异常,java,android,Java,Android,以下代码在执行期间导致空指针异常。它只是说空指针异常 当我将hotItem类放在函数之外时,它可以正常工作 一旦我将其放入函数中,它将导致空指针异常 我只是想知道为什么会发生这种情况,以及函数中类的生命周期是什么 private void getHotItem() { Gson gsonAdapter = new Gson(); class hotItem { private String hotItemPK = ""; } Typ
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();
}
}
private void getHotItem()
{
Gson gsonAdapter=new Gson();
类hotItem
{
私有字符串hotItemPK=“”;
}
类型hotItemType=newTypeToken(){}.getType();
List hotItemList=新建ArrayList();
尝试
{
getHotItemList();
itemAccess.start();
itemAccess.join();
hotItemList=gsonAdapter.fromJson(返回数据,hotItemType);
如果(!hotItemList.isEmpty())
{
setText(hotItemList.get(0.hotItemPK.toString());
}
}
捕捉(中断异常e)
{
//TODO自动生成的捕捉块
e、 printStackTrace();
}
}
请检查问题
决议:
我猜您的类路径上同时有gson.jar和gson-stream.jar;那不行
问题是,在Gson 2.1中,我们有一个自定义版本的JsonReader,它添加了一些秘密挂钩,使MapTypeAdatperFactory更快;这些钩子不适用于gson stream.jar版本的JsonReader
我想我理解这里可能发生的事情 问题在于,
HotItem
是一个内部类,这意味着它有一个对封闭类实例的隐式引用。但是当gsonAdapter.fromJson
方法尝试创建列表时,它没有(可能没有)要在其中创建热项的封闭类的实例。根据创建的方式,它可能使用null
引用创建它。。。这可能是NPE的原因
如果这是一个问题(或类似的问题),那么另一种解决方法是将HotItem
声明为static
类
我还应该指出,用小写字母开头类名是不好的风格。我已经检查了返回数据它与数据无关。。。该问题是由类似结构的类引起的。既然我把它放在函数之外,它就工作了。。如果像上面的代码一样将其放入函数中,则会导致空指针异常。我只是想知道这是怎么发生的……就像我在对gson进行长期研究后发现的一样。我发现问题是由以下原因引起的:Type hotItemType=new TypeToken(){}.getType();返回Null,但我不知道为什么它不能获取类型,如果类hotItem在函数getHotItem()中,一开始我认为我的代码和java类的概念有问题,但是我发现问题来自gson。我使用小写字母很长时间了,这很好。至少在C语言上,如果使用Java,我可能是错的。你对Java的看法是错的。等等