views:

149

answers:

1

Hi guys, I'm writing an application with GWT and I found on the internet that there's a library to use easily gdata features. In particular I need to use the integration with Google Calendar. I followed the official guide on gwt-gdata site to do the authentication ( http://code.google.com/p/gwt-gdata/wiki/GettingStarted ) but unfortunately, I got an error. This is the error:

  17:59:12.463 [ERROR] [testmappa] Unable to load module entry point class testMappa.client.TestMappa (see associated exception for details)
    com.google.gwt.core.client.JavaScriptException: 
(TypeError): $wnd.google.accounts is undefined
     fileName: http://127.0.0.1:8888
     lineNumber: 29
     stack: ("http://www.google.com/calendar/feeds/")@http://127.0.0.1:8888:29
    connect("http://127.0.0.1:8888/TestMappa.html?gwt.codesvr=127.0.0.1:9997","`gL1<a3s4B&Y{(Ci","127.0.0.1:9997","testmappa","2.0")@:0
    ((void 0),"testmappa","http://127.0.0.1:8888/testmappa/")@http://127.0.0.1:8888/testmappa/hosted.html?testmappa:264
    z()@http://127.0.0.1:8888/testmappa/testmappa.nocache.js:2
    (-2)@http://127.0.0.1:8888/testmappa/testmappa.nocache.js:8
        at com.google.gwt.dev.shell.BrowserChannelServer.invokeJavascript(BrowserChannelServer.java:195)
        at com.google.gwt.dev.shell.ModuleSpaceOOPHM.doInvoke(ModuleSpaceOOPHM.java:120)
        at com.google.gwt.dev.shell.ModuleSpace.invokeNative(ModuleSpace.java:507)
        at com.google.gwt.dev.shell.ModuleSpace.invokeNativeObject(ModuleSpace.java:264)
        at com.google.gwt.dev.shell.JavaScriptHost.invokeNativeObject(JavaScriptHost.java:91)
        at com.google.gwt.accounts.client.User.login(User.java)
        at testMappa.client.TestMappa.onModuleLoad(TestMappa.java:68)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
        at java.lang.reflect.Method.invoke(Method.java:597)
        at com.google.gwt.dev.shell.ModuleSpace.onLoad(ModuleSpace.java:369)
        at com.google.gwt.dev.shell.OophmSessionHandler.loadModule(OophmSessionHandler.java:185)
        at com.google.gwt.dev.shell.BrowserChannelServer.processConnection(BrowserChannelServer.java:380)
        at com.google.gwt.dev.shell.BrowserChannelServer.run(BrowserChannelServer.java:222)
        at java.lang.Thread.run(Thread.java:637)

I'm not able to understand the reason of this error. My code is simply:

    String scope = "http://www.google.com/calendar/feeds/";

    User.login(scope);

And as far as I know it should work as it is. I don't know what to do and I'm here to ask how to solve this problem and if I can directly use gdata native java library, but I believe this other thing is not possible to be done for client-side gwt code (since the code is going to be converted to javascript).

Thank you.

+1  A: 

The two lines of code you pasted above should actually come within the run method like this -

if (GData.isLoaded(GDataSystemPackage.CALENDAR)) {
   Window.alert("Package is loaded");
} else {
   GData.loadGDataApi("MyApiKey",
      new Runnable() {
        public void run() {
             String scope = "http://www.google.com/calendar/feeds/";
             User.login(scope);
             //remaining code comes in here. you may create a new method
             //and call it from here.
        }
      },
      GDataSystemPackage.CALENDAR);
}

If you don't load the GData api code, you are likely to get the javascript error that you pasted.

sri
This seems to work, but I don't understand, I wrote the two line above just after the code you pasted here and didn't work... BTW, thank you!
Raffo
You need to understand asynchronous nature of javascript. Read this thread post - http://groups.google.com/group/Google-Web-Toolkit/browse_thread/thread/faca1575f306ba0f
sri