【问题标题】:Android gson invalid ClassCastExceptionAndroid gson 无效 ClassCastException
【发布时间】:2012-10-05 21:55:10
【问题描述】:

嗨,我有一个这样的 Json 字符串

   {"lines":[{"line":"COLOMBO - BADULLA"},{"line":"COLOMBO - MATALE"},{"line":"COLOMBO - PUTTLAM"},{"line":"COLOMBO - THANDIKULAM"},{"line":"COLOMBO - TALAIMANNAR"},{"line":"COLOMBO - BATTICALOA"},{"line":"COLOMBO - TRINCOMALEE"},{"line":"COLOMBO - MATARA"},{"line":"COLOMBO - AVISSAWELLA"},{"line":"COLOMBO - MIHINTALE"}]}

及其域 as This

public class Line{
    private String line;

    public String getLine(){
        return this.line;
    }
    public void setLine(String line){
        this.line = line;
    }
}



public class Lines{
    private List lines;

    public List getLines(){
        return this.lines;
    }
    public void setLines(List lines){
        this.lines = lines;
    }
}

并将 gson 映射到对象

仅供参考:对于 jsonString,我传递的是字符串而不是 JSON URL(使用 HttpGet)

    Line ln =null;
    Gson gson = new Gson();
    ln = gson.fromJson(jsonString, Line.class); not the URL
    return ln;

抛出的异常是:

java.lang.RuntimeException: Unable to start activity ComponentInfo{com.sab.loc/com.sab.loc.MainActivity}: java.lang.ClassCastException: com.sab.loc.Line cannot be cast to java.util.List

我不确定出了什么问题,我认为我使用http://jsongen.byingtondesign.com/ 生成的类定义是正确的

知道哪里做错了吗?

【问题讨论】:

    标签: java android gson


    【解决方案1】:

    您的jsonString 包含分配给lines 的对象的arraylist

    {"lines":[{"line":"COLOMBO - BADULLA"},...]}

    因此,您尝试将此jsonString 数据映射到的类必须具有lines 变量。

    Line.java 类没有lines 变量。

    试试这个:

    public class Lines {
        private List<Line> lines;
    
        public List<Line> getLines(){
            return this.lines;
        }
        public void setLines(List<Line> lines){
            this.lines = lines;
        }
    }
    
    public class Line {
        private String line;
    
        public String getLine(){
            return this.line;
        }
        public void setLine(String line){
            this.line = line;
        }
    }
    

    还有这个:

    Lines ln = new Gson().fromJson(jsonString, Lines.class);
    

    【讨论】:

      【解决方案2】:

      您的 json 没有直接返回 Line class. 它正在返回 Lines class. 你正在尝试cast it into Line 这不是List 的一种方式 是throwing class cast exception

      您可以在Line.java class 中定义字段private List lines;

      最好在 Line.java 类中定义 generic type private List&lt;Lines&gt; lines;generate the setter getter stubs of lines

      【讨论】:

        猜你喜欢
        • 2011-09-25
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-08-28
        • 1970-01-01
        • 1970-01-01
        • 2019-01-07
        相关资源
        最近更新 更多