我是Android和App Engine的新手,我正在尝试按照此处描述的步骤创建App Engine Connected Android项目:
http://code.google.com/intl/es-ES/eclipse/docs/appengine_connected_android.html
但我无法使用C2DM完成“Say Hello”步骤(Run& Debug:7),因为它会提示SocketException(“协议不支持地址系列”),有时在调试时会出现RuntimeException它本地...我不明白,因为我还没有自定义项目,但经过一些调试后我发现它抱怨一些库(包括在项目创建中)没有源附件...最烦人的部分是它抱怨ThreadPoolExecutor.class,它属于Android 2.2 JAR中的java.util.concurrent ...很奇怪,但无论如何我把库附加到它的源头并且它一直抱怨同一个类(“源附件不包含文件ThreadPoolExecutor.class的源“)...
在执行第一行时,它似乎在Util.getRequestFactory()方法中崩溃。这里它调用RequestFactorySource中的一个方法,它属于requestfactory-client库,包含在项目创建中但是又没有源附件......顺便说一下,在执行该方法调用之后,“task”变量的值为null ,这是正常的吗?
我想这是关于配置中的一个小错误或者其他什么,但是我已经挣扎了几天而且我已经不知道该怎么做了,所以任何帮助都会受到赞赏:)
编辑:我正在附加logcat输出,我希望这样可以更容易地找到错误。谷歌搜索后我发现这是C2DM示例项目中的常见错误,但我没有得到任何适当的解决方案。
I/C2dmftwActivity( 333): onCreate
I/ActivityManager( 58): Displayed activity com.c2dmftw/.C2dmftwActivity: 1281
ms (total 1281 ms)
D/dalvikvm( 126): GC_EXPLICIT freed 997 objects / 54032 bytes in 83ms
W/dalvikvm( 333): threadid=7: thread exiting with uncaught exception (group=0x4
001d800)
E/AndroidRuntime( 333): FATAL EXCEPTION: AsyncTask #1
E/AndroidRuntime( 333): java.lang.RuntimeException: An error occured while exec
uting doInBackground()
E/AndroidRuntime( 333): at android.os.AsyncTask$3.done(AsyncTask.java:20
0)
E/AndroidRuntime( 333): at java.util.concurrent.FutureTask$Sync.innerSet
Exception(FutureTask.java:273)
E/AndroidRuntime( 333): at java.util.concurrent.FutureTask.setException(
FutureTask.java:124)
E/AndroidRuntime( 333): at java.util.concurrent.FutureTask$Sync.innerRun
(FutureTask.java:307)
E/AndroidRuntime( 333): at java.util.concurrent.FutureTask.run(FutureTas
k.java:137)
E/AndroidRuntime( 333): at java.util.concurrent.ThreadPoolExecutor.runWo
rker(ThreadPoolExecutor.java:1068)
E/AndroidRuntime( 333): at java.util.concurrent.ThreadPoolExecutor$Worke
r.run(ThreadPoolExecutor.java:561)
E/AndroidRuntime( 333): at java.lang.Thread.run(Thread.java:1096)
E/AndroidRuntime( 333): Caused by: java.lang.RuntimeException: The RequestFacto
ry ValidationTool must be run for the com.c2dmftw.client.MyRequestFactory Reques
tFactory type
E/AndroidRuntime( 333): at com.google.web.bindery.requestfactory.vm.impl
.Deobfuscator$Builder.load(Deobfuscator.java:59)
E/AndroidRuntime( 333): at com.google.web.bindery.requestfactory.vm.InPr
ocessRequestFactory.<init>(InProcessRequestFactory.java:80)
E/AndroidRuntime( 333): at com.google.web.bindery.requestfactory.vm.Requ
estFactorySource.create(RequestFactorySource.java:43)
E/AndroidRuntime( 333): at com.c2dmftw.Util.getRequestFactory(Util.java:
158)
E/AndroidRuntime( 333): at com.c2dmftw.C2dmftwActivity$2$1.doInBackgroun
d(C2dmftwActivity.java:144)
E/AndroidRuntime( 333): at com.c2dmftw.C2dmftwActivity$2$1.doInBackgroun
d(C2dmftwActivity.java:1)
E/AndroidRuntime( 333): at android.os.AsyncTask$2.call(AsyncTask.java:18
5)
E/AndroidRuntime( 333): at java.util.concurrent.FutureTask$Sync.innerRun
(FutureTask.java:305)
E/AndroidRuntime( 333): ... 4 more
W/ActivityManager( 58): Force finishing activity com.c2dmftw/.C2dmftwActivit
y
W/GTalkService( 170): [GTalkConnection.13] doConnect: caught XMPPError connecti
ng to mtalk.google.com:5228.: (502)
W/GTalkService( 170): -- caused by: java.net.SocketException: The operation t
imed out
答案 0 :(得分:0)
我想我遇到了同样的问题。验证库丢失了,手动添加后它就可以工作了。
要添加它或检查它是否包括: 右键单击您的项目&gt;属性&gt; Java构建路径&gt; “库选项卡”&gt;添加外部JAR
然后浏览到您的GWT安装文件夹。如果您使用eclipse安装它,请使用eclipse / plugins / com.google.gwt.eclipse.sdkbundle_ / gwt- / validation-api-1.0.0.GA.jar
清理并构建工作区并再次尝试。
这也可能发生在客户端GWT方面。如果发生这种情况,您必须执行相同的操作,但使用您的GAE项目并添加相同的jar
答案 1 :(得分:0)
这是问题
Caused by: java.lang.RuntimeException: The RequestFacto
ry ValidationTool must be run for the com.c2dmftw.client.MyRequestFactory Reques
tFactory type
如果您使用的是GWT 2.4+,则必须运行验证工具。您可以配置Eclipse为您执行此操作,具体方法如下:
http://code.google.com/p/google-web-toolkit/wiki/RequestFactoryInterfaceValidation