2

こんにちは私はこのように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"}]}

そしてそのドメインクラスはこのように

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/を使用して生成したクラス定義は正しいと思います。

それがどこで間違っているのか考えていますか?

4

2 に答える 2

2

に割り当てられたオブジェクトのorがjsonString含まれています。arraylistlines

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

したがって、このjsonStringデータをマップしようとするクラスには、lines変数が必要です。

Line.javalinesクラスには変数がありません。

これを試して:

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);
于 2012-09-05T09:17:33.253 に答える
1

あなたのjsonは直接戻っLine class.ていませんそれは戻ってきて、あなたはそれがそうであるようなタイプではないLines class. ものにしようとしています。cast it into LineListthrowing class cast exception

private List lines;内のフィールドを定義できますLine.java class

クラスgeneric type private List<Lines> lines;内で定義する方が良いです。Line.javagenerate the setter getter stubs of lines

于 2012-09-05T06:45:38.897 に答える