Java 使用GSON时不兼容的类型

Java 使用GSON时不兼容的类型,java,json,gson,Java,Json,Gson,第一:这是我第一次使用GSON 试图解析一些JSON,我得到了“不兼容类型” PlayerData是一个内部类: class PlayerData { public Point position; public String mapname; public int level; public PlayerData() {} } 是什么原因造成的?在GSON文档中,显然有一个方法public T fromJson(字符串json, 类(ClassSoft) 抛出

第一:这是我第一次使用GSON

试图解析一些JSON,我得到了“不兼容类型”

PlayerData
是一个内部类:

class PlayerData {
    public Point position;
    public String mapname;
    public int level;

    public PlayerData() {}
}
是什么原因造成的?在GSON文档中,显然有一个方法
public T fromJson(字符串json,
类(ClassSoft)
抛出JsonSyntaxException
,我在(AFAIK)做的事情和谷歌在其GSON用户指南中做的一样

编辑:

XCode做了一些奇怪的事情,当我试图用
Terminal
编译它时,除了我对服务器的请求之外,一切都正常,这导致了几个NPE,因为
response
仍然是空的。多亏了maaartinus,我知道不应该有编译器错误,所以我尝试在不使用XCode的情况下编译它。

尝试将内部类
设置为静态的
,否则您将需要一个自定义的
InstanceCreator

Gson无法自动反序列化纯内部类,因为 它们的no-args构造函数还需要对包含 对象,该对象在反序列化时不可用。你可以 通过使内部类保持静态或 为其提供自定义InstanceCreator


请尝试使内部类成为静态的,否则您将需要一个自定义的
InstanceCreator
,如中所述

Gson无法自动反序列化纯内部类,因为 它们的no-args构造函数还需要对包含 对象,该对象在反序列化时不可用。你可以 通过使内部类保持静态或 为其提供自定义InstanceCreator


对我来说,它可以编译,但我不得不用
GSON
替换
GSON
。要么你在写这个问题的时候太草率了,要么你用了一些我从没听说过的“GSON”

您的
响应是
字符串吗


一旦你运行它,你需要Vrushank Desai的答案。

对我来说,它可以编译,但我不得不用
GSON
替换
GSON
。要么你在写这个问题的时候太草率了,要么你用了一些我从没听说过的“GSON”

您的
响应是
字符串吗


一旦运行,您需要Vrushank Desai的答案。

响应的值是什么?这无关紧要,因为这是一个编译器错误。Response是我在运行时从服务器获取的字符串。但是,由于错误发生在应用程序运行之前,因此从未实际获取该值。响应的值是多少?这无关紧要,因为这是一个编译器错误。Response是我在运行时从服务器获取的字符串。但是,由于错误发生在应用程序运行之前,因此从未实际获取该值。是的,响应是一个字符串,但这是一个编译器错误,因此从未从问题中检索响应的值。但这不会改变响应的类型当然。。。早上写评论太早了。你是对的!我想这是一个XCode错误。当我通过
Terminal
编译它时,它会编译,但会给我一些NullPointerException。显然,我对服务器的请求不起作用,因为
response
仍然是emtpy。是的,response是一个字符串,但这是一个编译器错误,因此永远不会从问题中检索response的值。但这当然不会改变类型。。。早上写评论太早了。你是对的!我想这是一个XCode错误。当我通过
Terminal
编译它时,它会编译,但会给我一些NullPointerException。显然,我对服务器的请求不起作用,因为
response
仍然是emtpy。这不起作用,它仍然表示
不兼容类型
。我希望XCode 2.5能提供更多的信息。这是一个有趣的工具(或者你不能使用它)。通常,这样的问题需要几秒钟的时间,通常在eclipse中按下
ctrl-1
就可以解决它。这不起作用,它仍然表示
不兼容类型
。我希望XCode 2.5能提供更多的信息。这是一个有趣的工具(或者你不能使用它)。通常,这样的问题需要几秒钟的时间,通常在eclipse中按下
ctrl-1
就可以解决这个问题。
class PlayerData {
    public Point position;
    public String mapname;
    public int level;

    public PlayerData() {}
}