2012-09-05 5 views
2

안녕이안드로이드 GSON 무효로 ClassCastException

같은 개체

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 등이

{"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"}]} 

그리고 그것의 도메인 클래스로 JSON 문자열을

FYI : for jsonString 내가 문자열이 아닌 JSON의 URL 예외가 발생

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

는 (A HttpGet을 사용하여) 전달합니다으로 무엇이 잘못되었는지

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/

어디에서 잘못 되었습니까?

답변

2

jsonStringlines에 할당 된 객체의 array 또는 list을 포함합니다.

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

그래서 클래스 당신은 lines 변수가 있어야합니다,이 jsonString 데이터를 매핑하려고합니다.

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); 
1

귀하의 JSON은 직접 그것은 Lines class. 을 반환하는 것 Line class.을 반환하지 않습니다 그리고 당신은 방법 이 throwing class cast exception 인의 List의 유형하지 않은 cast it into Line에 노력하고 있습니다.

Line.java class 안에 private List lines; 필드를 정의 할 수 있습니다.

Line.java 클래스 및 generate the setter getter stubs of lines 안에 generic type private List<Lines> lines;을 정의하는 것이 좋습니다.

+0

이있어? – Sudantha