2012-02-17 23 views
29

Ejecutando un juego! aplicación con Scala. Estoy haciendo una solicitud donde se espera que la respuesta sea una cadena JSON. Al verificar el depurador, JsonElement devuelve OK con toda la información como se esperaba. Sin embargo, el problema es cuando trato de ejecutar métodos en ese JsonElement.GSON JsonObject "Excepción de operación no admitida: nulo" 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 

El único error que consigo es volver Unsupported Operation Exception: null y he probado esto en getAsString y getAsJsonObject y getAsJsonPrimitive

Cualquier idea de por qué está fallando en todos los métodos? Gracias.

Respuesta

36

ser posible que su JsonElement es un JsonNull

Lo que podría hacer es comprobar primero que no es mediante el uso de json.isJsonNull

De lo contrario, tratar de conseguir la representación de cadena con json.toString

+1

Sí, eso funcionó, no esperaba un buen ole null. ¡Gracias! – crockpotveggies

+0

json.isJsonNull funcionó ... gracias –

33

I tuve un problema similar y tuve que cambiar jsonObject.getAsString() a jsonObject.toString();

+1

de alguna manera ahora funciona, ¿sabes la razón? – bheatcoker

+0

nada funcionó, pero esto. ¡Gracias! – NecipAllef

+1

Al mirar el repositorio github, parece que el método getAsString() aún no está implementado. Simplemente lanza una excepción no admitida sin importar qué. https://github.com/google/gson/blob/master/gson/src/main/java/com/google/gson/JsonElement.java –

7

En mi caso sólo necesitaba para obtener el elemento como una cadena vacía si es nula, por lo que ha escrito una función como esta:

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

Así que en lugar de

val geocoder = json.getAsString 

Puede sólo tiene que utilizar este

val geocoder = getNullAsEmptyString(json); 

devuelve "" si el elemento es nulo y la cadena real si no es

Cuestiones relacionadas