2017-10-06 150 views
0

此json发生在目标或原点位于英国之外时,因此不会给我任何结果!我需要检查这对空校验,所以我不接受空指针异常分析从Google距离矩阵API发送的Json响应

JSON结果:

{ 
"destination_addresses" : [ "Durham, NC, USA" ], 
"origin_addresses" : [ "Lancashire, UK" ], 
"rows" : [ 
    { 
    "elements" : [ 
     { 
      "status" : "ZERO_RESULTS" 
     } 
    ] 
    } 
], 

“状态”: “OK” }

代码:

public static void extractJsonFromRequest(GoogleResponsePojo response) { 
    String destinationAddress = 
    response.getDestination_addresses().get(0); 
    String timeTaken = 
response.getRows().get(0).getElements().get(0).getDuration().getText(); 
    String originAddress = response.getOrigin_addresses().get(0); 

    System.out.println("It will take ** "+ timeTaken + " ** to walk 
from " + originAddress + " to " + destinationAddress); 
} 

作为json的结构的Google Reponse POJO:

public class GoogleResponsePojo { 

private List<String> destination_addresses; 
private List<String> origin_addresses; 
private List<Rows> rows; 

public List<String> getDestination_addresses() { 
    return destination_addresses; 
} 

public void setDestination_addresses(List<String> destination_addresses) { 
    this.destination_addresses = destination_addresses; 
} 

public List<String> getOrigin_addresses() { 
    return origin_addresses; 
} 

public void setOrigin_addresses(List<String> origin_addresses) { 
    this.origin_addresses = origin_addresses; 
} 

public List<Rows> getRows() { 
    return rows; 
} 

public void setRows(List<Rows> rows) { 
    this.rows = rows; 
} 
} 

class Rows { 
private List<Element> elements; 

public List<Element> getElements() { 
    return elements; 
} 

public void setElements(List<Element> elements) { 
    this.elements = elements; 
} 
} 

class Element { 
private TextValue distance; 
private TextValue duration; 

public TextValue getDistance() { 
    return distance; 
} 

public void setDistance(TextValue distance) { 
    this.distance = distance; 
} 

public TextValue getDuration() { 
    return duration; 
} 

public void setDuration(TextValue duration) { 
    this.duration = duration; 
} 
} 

class TextValue { 
private String text; 
private String value; 

public String getText() { 
    return text; 
} 

public void setText(String text) { 
    this.text = text; 
} 

public String getValue() { 
    return value; 
} 

public void setValue(String value) { 
    this.value = value; 
} 
} 

我基本上只需要解析下面的json,以便我可以说(如果status!= ZERO_RESULTS)保存响应,否则抛出异常!可能很容易,但即时通讯挣扎!非常感谢!

+0

你可以添加响应作为字符串没有解析? –

+0

你是什么意思对不起?将响应添加到Gson Constrctor? – Josh

+0

不,我想看看'response.toString()'的结果' –

回答

0

更改GoogleResponsePojo到:

public class GoogleResponsePojo { 

    private List<String> destination_addresses; 
    private List<String> origin_addresses; 
    private List<Rows> rows; 

    public void setDestination_addresses(List<String> destination_addresses) { 
     this.destination_addresses = destination_addresses; 
    } 

    public void setOrigin_addresses(List<String> origin_addresses) { 
     this.origin_addresses = origin_addresses; 
    } 

    public void setRows(List<Rows> rows) { 
     this.rows = rows; 
    } 

    //getters 
} 


private static class Rows{ 
    private List<Element> elements; 

    public void setElements(List<Element> elements) { 
     this.elements = elements; 
    } 

    //getters 
} 

private static class Element{ 
    private TextValue distance; 
    private TextValue duration; 

    public void setDistance(TextValue distance) { 
     this.distance = distance; 
    } 

    public void setDuration(TextValue duration) { 
     this.duration = duration; 
    } 

    //getters 
} 

private static class TextValue{ 
    private String text; 
    private String value; 

    public void setText(String text) { 
     this.text = text; 
    } 

    public void setValue(String value) { 
     this.value = value; 
    } 

    //getters 
} 

您可以duration如下:

GoogleResponsePojo name = gson.fromJson(response.toString(),GoogleResponsePojo.class); 

name.getRows().get(0).getDuration().getText(); 

,我建议使用http-request它基于Apache HTTP API。它的使用简单:

public static final String BASE_URL = "https://maps.googleapis.com/maps/api/distancematrix/json"; 

private static final HttpRequest<GoogleResponsePojo> HTTP_REQUEST = 
     HttpRequestBuilder.createGet(BASE_URL, GoogleResponsePojo.class) 
       .addDefaultRequestParameter("origins", "Seattle") 
       .addDefaultRequestParameter("destinations", "San+Francisco") 
       .addDefaultRequestParameter("key", "***") 
       .build(); 

@GET 
@Produces(MediaType.APPLICATION_JSON) 
public static void updateTestExecutionDetails() throws IOException { 

    ResponseHandler<GoogleResponsePojo> responseHandler = HTTP_REQUEST.execute(); 

    GoogleResponsePojo name = responseHandler.orElseThrow(); // throws ResponseException when status code != 200 

    System.out.println(name.getDestination_addresses().get(0)); 
    System.out.println(name.getRows().get(0).getElements().get(0).getDuration().getText()); 
    System.out.println(name.getOrigin_addresses().get(0)); 
} 
+0

嗨,谢谢你。但是,我仍然无法使其工作。我收到一个ResponseException给出一个502. – Josh

+0

嗨,我纠正了代码。 –

+0

告诉我,如果它的工作与否。 'destination_addresses'和'origin_addresses'必须是'List '或'String []'。我没有立即注意到)。已经更正。 –