I’m working on a little app and using GWT to build it.
I just tried making a request to a remote server which will return a response as JSON.
I’ve tried using the overlay types concept but I couldn’t get it working. I’ve been changing the code around so its a bit off from where the Google GWT tutorials left.
JavaScriptObject json;
public JavaScriptObject executeQuery(String query) {
String url = "http://api.domain.com?client_id=xxxx&query=";
RequestBuilder builder = new RequestBuilder(RequestBuilder.GET,
URL.encode(url + query));
try {
@SuppressWarnings("unused")
Request request = builder.sendRequest(null, new RequestCallback() {
public void onError(Request request, Throwable exception) {
// violation, etc.)
}
public void onResponseReceived(Request request,
Response response) {
if (200 == response.getStatusCode()) {
// Process the response in response.getText()
json =parseJson(response.getText());
} else {
}
}
});
} catch (RequestException e) {
// Couldn't connect to server
}
return json;
}
public static native JavaScriptObject parseJson(String jsonStr) /*-{
return eval(jsonStr );
;
}-*/;
In the chrome’s debugger I get umbrellaexception, unable to see the stack trace and GWT debugger dies with NoSuchMethodError… Any ideas, pointers?
JsonUtils#safeEval()to evaluate the JSON string instead of callingeval()directly.More importantly, don’t try to pass the result of an asynchronous call (like
RequestBuilder#sendRequest()back to a caller usingreturn– use a callback: