Gwt-GData autenticazione
Domanda
Sto scrivendo un'applicazione con GWT e ho trovato su internet che c'è una biblioteca per utilizzare le funzionalità facilmente Gdata. In particolare, ho bisogno di utilizzare l'integrazione con Google Calendar. Ho seguito la guida ufficiale in loco GWT-GData per fare l'autenticazione ( http: / /code.google.com/p/gwt-gdata/wiki/GettingStarted ), ma purtroppo, ho ottenuto un errore. Questo è l'errore:
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)
Non sono in grado di capire il motivo di questo errore. Il mio codice è semplice:
String scope = "http://www.google.com/calendar/feeds/";
User.login(scope);
E per quanto ne so dovrebbe funzionare così com'è. Non so cosa fare e io sono qui per chiedere come risolvere questo problema e se posso usare direttamente GData libreria Java nativo, ma credo che quest'altra cosa non è possibile fare per il codice lato client GWT ( dato che il codice sta per essere convertito in javascript).
Grazie.
Soluzione
Le due righe di codice incollate sopra dovrebbe effettivamente venire all'interno del metodo run come questo -
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); }
Se non si carica il codice API GData, si rischia di ottenere l'errore javascript che si è incollato.