2012-02-17 29 views
29

Chạy một lần phát! ứng dụng với Scala. Tôi đang thực hiện một yêu cầu trong đó phản hồi được mong đợi là một chuỗi JSON. Khi kiểm tra trình gỡ lỗi, JsonElement trả về OK với tất cả thông tin như mong đợi. Tuy nhiên, vấn đề là khi tôi cố gắng thực sự chạy các phương thức trên JsonElement đó.GSON JsonObject "Ngoại lệ hoạt động không được hỗ trợ: null" getAsString

val json = WS.url("http://maps.googleapis.com/maps/api/geocode/json?callback=?&sensor=true&address=%s", startAddress+","+startCity+","+startProvince).get.getJson 
    val geocoder = json.getAsString 

Các lỗi duy nhất mà tôi có được trở lại là Unsupported Operation Exception: null và tôi đã cố gắng này trên getAsStringgetAsJsonObjectgetAsJsonPrimitive

Bất cứ ý tưởng tại sao nó thất bại trên tất cả các phương pháp? Cảm ơn.

Trả lời

36

Có lẽ là bạn JsonElement là một JsonNull

gì bạn có thể làm là trước hết phải kiểm tra xem nó không phải là bằng cách sử dụng json.isJsonNull

Nếu không, hãy thử để có được đại diện chuỗi của nó với json.toString

+1

Yep đã thực hiện thủ thuật này, không mong đợi sự thiếu sót tốt. Cảm ơn! – crockpotveggies

+0

json.isJsonNull work..thanks –

33

tôi đã có một vấn đề tương tự và tôi đã phải thay đổi jsonObject.getAsString() thành jsonObject.toString();

+1

bằng cách nào đó bây giờ nó hoạt động, bạn có biết lý do không? – bheatcoker

+0

không có gì hiệu quả nhưng điều này. Cám ơn! – NecipAllef

+1

Nhìn vào repo github, có vẻ như phương thức getAsString() chưa được thực hiện. Nó chỉ ném ngoại lệ không được hỗ trợ không có vấn đề gì. https://github.com/google/gson/blob/master/gson/src/main/java/com/google/gson/JsonElement.java –

7

Trong trường hợp của tôi, tôi chỉ cần để có được nguyên tố này như một chuỗi rỗng nếu nó là null, vì vậy tôi đã viết một hàm như thế này:

private String getNullAsEmptyString(JsonElement jsonElement) { 
     return jsonElement.isJsonNull() ? "" : jsonElement.getAsString(); 
    } 

Vì vậy, thay vì

val geocoder = json.getAsString 

Bạn có thể chỉ cần sử dụng số này

val geocoder = getNullAsEmptyString(json); 

Nó trả về "" nếu phần tử là rỗng và chuỗi thực tế nếu nó không phải là

Các vấn đề liên quan