3

我是 Android 编程的新手,我正在尝试执行一个将图像发送到返回结果的服务器的应用程序。出于这个原因,我正在关注App Engine Connected Android 上的谷歌教程2 。运行应用程序的电话端时出现问题,因为模拟器没有启动,如果我用真实设备尝试它,它会说“使用端点注册失败”,结果的屏幕截图在链接1中.

我已将 LOCAL_ANDROID_RUN 设置为 true,并且还插入了相应的项目编号和 api_keys。不知道怎么回事,控制台和logcat输出如下:

运行 -AppEngine 控制台:

feb. 27, 2013 11:36:51 AM com.google.apphosting.utils.config.EarHelper logNotAnEar
INFO: Directory '/Users/JL/Documents/workspace/p27_2-AppEngine/war' is not an EAR directory. File /Users/JL/Documents/workspace/p27_2-AppEngine/war/appengine-application.xmlappengine-application.xml not detected.
feb. 27, 2013 11:36:51 AM com.google.apphosting.utils.config.EarHelper logNotAnEar
INFO: Directory '/Users/JL/Documents/workspace/p27_2-AppEngine/war' is not an EAR directory. File /Users/JL/Documents/workspace/p27_2-AppEngine/war/appengine-application.xmlappengine-application.xml not detected.
feb. 27, 2013 11:36:51 AM com.google.apphosting.utils.config.EarHelper logNotAnEar
INFO: Directory '/Users/JL/Documents/workspace/p27_2-AppEngine/war' is not an EAR directory. File /Users/JL/Documents/workspace/p27_2-AppEngine/war/appengine-application.xmlappengine-application.xml not detected.
feb. 27, 2013 11:36:51 AM com.google.apphosting.utils.config.EarHelper logNotAnEar
INFO: Directory '/Users/JL/Documents/workspace/p27_2-AppEngine/war' is not an EAR directory. File /Users/JL/Documents/workspace/p27_2-AppEngine/war/appengine-application.xmlappengine-application.xml not detected.
feb. 27, 2013 11:36:51 AM com.google.apphosting.utils.config.AppEngineWebXmlReader readAppEngineWebXml
INFO: Successfully processed /Users/JL/Documents/workspace/p27_2-AppEngine/war/WEB-INF/appengine-web.xml
feb. 27, 2013 11:36:51 AM com.google.apphosting.utils.config.AbstractConfigXmlReader readConfigXml
INFO: Successfully processed /Users/JL/Documents/workspace/p27_2-AppEngine/war/WEB-INF/web.xml
feb. 27, 2013 11:36:51 AM com.google.appengine.tools.development.SystemPropertiesManager setSystemProperties
INFO: Overwriting system property key 'java.util.logging.config.file', value '/Applications/eclipse/plugins/com.google.appengine.eclipse.sdkbundle_1.7.5/appengine-java-sdk-1.7.5/config/sdk/logging.properties' with value 'WEB-INF/logging.properties' from '/Users/JL/Documents/workspace/p27_2-AppEngine/war/WEB-INF/appengine-web.xml'
java.net.BindException: Address already in use
    at sun.nio.ch.Net.bind0(Native Method)
    at sun.nio.ch.Net.bind(Net.java:344)
    at sun.nio.ch.Net.bind(Net.java:336)
    at sun.nio.ch.ServerSocketChannelImpl.bind(ServerSocketChannelImpl.java:199)
    at sun.nio.ch.ServerSocketAdaptor.bind(ServerSocketAdaptor.java:74)
    at org.mortbay.jetty.nio.SelectChannelConnector.open(SelectChannelConnector.java:216)
    at com.google.appengine.tools.development.JettyContainerService.connectContainer(JettyContainerService.java:189)
    at com.google.appengine.tools.development.AbstractContainerService.createConnection(AbstractContainerService.java:243)
    at com.google.appengine.tools.development.AbstractServer.createConnection(AbstractServer.java:71)
    at com.google.appengine.tools.development.DevAppServerImpl$Servers.createConnections(DevAppServerImpl.java:445)
    at com.google.appengine.tools.development.DevAppServerImpl.start(DevAppServerImpl.java:181)
    at com.google.appengine.tools.development.DevAppServerMain$StartAction.apply(DevAppServerMain.java:333)
    at com.google.appengine.tools.util.Parser$ParseResult.applyArgs(Parser.java:48)
    at com.google.appengine.tools.development.DevAppServerMain.<init>(DevAppServerMain.java:269)
    at com.google.appengine.tools.development.DevAppServerMain.main(DevAppServerMain.java:245)

在真实设备控制台上运行手机端:

[2013-02-27 11:31:53 - p27_2] ------------------------------
[2013-02-27 11:31:53 - p27_2] Android Launch!
[2013-02-27 11:31:53 - p27_2] adb is running normally.
[2013-02-27 11:31:53 - p27_2] Performing com.p27_2.MainActivity activity launch
[2013-02-27 11:31:56 - p27_2] Application already deployed. No need to reinstall.
[2013-02-27 11:31:56 - p27_2] Starting activity com.p27_2.MainActivity on device 31315808870300EC
[2013-02-27 11:31:56 - p27_2] ActivityManager: Starting: Intent { act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] cmp=com.p27_2/.MainActivity }
[2013-02-27 11:31:56 - p27_2] ActivityManager: Warning: Activity not started, its current task has been brought to the front
[2013-02-27 11:35:21 - p27_2] ------------------------------
[2013-02-27 11:35:21 - p27_2] Android Launch!
[2013-02-27 11:35:21 - p27_2] adb is running normally.
[2013-02-27 11:35:21 - p27_2] Performing com.p27_2.MainActivity activity launch
[2013-02-27 11:35:24 - p27_2] Application already deployed. No need to reinstall.
[2013-02-27 11:35:24 - p27_2] Starting activity com.p27_2.MainActivity on device 31315808870300EC
[2013-02-27 11:35:24 - p27_2] ActivityManager: Starting: Intent { act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] cmp=com.p27_2/.MainActivity }
[2013-02-27 11:35:24 - p27_2] ActivityManager: Warning: Activity not started, its current task has been brought to the front
[2013-02-27 11:37:06 - p27_2] ------------------------------
[2013-02-27 11:37:06 - p27_2] Android Launch!
[2013-02-27 11:37:06 - p27_2] adb is running normally.
[2013-02-27 11:37:06 - p27_2] Performing com.p27_2.MainActivity activity launch
[2013-02-27 11:37:09 - p27_2] Application already deployed. No need to reinstall.
[2013-02-27 11:37:09 - p27_2] Starting activity com.p27_2.MainActivity on device 31315808870300EC
[2013-02-27 11:37:10 - p27_2] ActivityManager: Starting: Intent { act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] cmp=com.p27_2/.MainActivity }
[2013-02-27 11:37:10 - p27_2] ActivityManager: Warning: Activity not started, its current task has been brought to the front

日志猫:

02-27 11:36:58.968: D/GCMRegistrar(1684): resetting backoff for com.p27_2
02-27 11:36:58.968: V/GCMRegistrar(1684): Registering app com.p27_2 of senders 658829472559
02-27 11:36:59.296: V/GCMBroadcastReceiver(1684): onReceive: com.google.android.c2dm.intent.REGISTRATION
02-27 11:36:59.296: V/GCMBroadcastReceiver(1684): GCM IntentService class: com.p27_2.GCMIntentService
02-27 11:36:59.296: V/GCMBaseIntentService(1684): Acquiring wakelock
02-27 11:36:59.316: W/AbstractGoogleClient(1684): Application name is not set. Call Builder#setApplicationName.
02-27 11:36:59.328: D/GCMBaseIntentService(1684): handleRegistration: registrationId = APA91bEN9AXnKP8jsVmt3fNj1ziAegl04m4laECFqkzFxbuk2dfdvK3ePCVH_3JOjKehC0EpPgkkIp8t-OJtxTe_E12lw9atzEcHVpsyr_Qdi4UYxQgsW2w3uZQRnbj8Aho_IUjAWKub, error = null, unregistered = null
02-27 11:36:59.328: D/GCMRegistrar(1684): resetting backoff for com.p27_2
02-27 11:36:59.335: V/GCMRegistrar(1684): Saving regId on app version 1
02-27 11:37:39.511: E/com.p27_2.GCMIntentService(1684): Exception received when attempting to register with server at http://10.0.2.2:8888/_ah/api/
02-27 11:37:39.511: E/com.p27_2.GCMIntentService(1684): java.net.SocketTimeoutException: failed to connect to /10.0.2.2 (port 8888) after 20000ms
02-27 11:37:39.511: E/com.p27_2.GCMIntentService(1684):     at libcore.io.IoBridge.connectErrno(IoBridge.java:159)
02-27 11:37:39.511: E/com.p27_2.GCMIntentService(1684):     at libcore.io.IoBridge.connect(IoBridge.java:112)
02-27 11:37:39.511: E/com.p27_2.GCMIntentService(1684):     at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:192)
02-27 11:37:39.511: E/com.p27_2.GCMIntentService(1684):     at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:459)
02-27 11:37:39.511: E/com.p27_2.GCMIntentService(1684):     at java.net.Socket.connect(Socket.java:842)
02-27 11:37:39.511: E/com.p27_2.GCMIntentService(1684):     at libcore.net.http.HttpConnection.<init>(HttpConnection.java:76)
02-27 11:37:39.511: E/com.p27_2.GCMIntentService(1684):     at libcore.net.http.HttpConnection.<init>(HttpConnection.java:50)
02-27 11:37:39.511: E/com.p27_2.GCMIntentService(1684):     at libcore.net.http.HttpConnection$Address.connect(HttpConnection.java:341)
02-27 11:37:39.511: E/com.p27_2.GCMIntentService(1684):     at libcore.net.http.HttpConnectionPool.get(HttpConnectionPool.java:87)
02-27 11:37:39.511: E/com.p27_2.GCMIntentService(1684):     at libcore.net.http.HttpConnection.connect(HttpConnection.java:128)
02-27 11:37:39.511: E/com.p27_2.GCMIntentService(1684):     at libcore.net.http.HttpEngine.openSocketConnection(HttpEngine.java:315)
02-27 11:37:39.511: E/com.p27_2.GCMIntentService(1684):     at libcore.net.http.HttpEngine.connect(HttpEngine.java:310)
02-27 11:37:39.511: E/com.p27_2.GCMIntentService(1684):     at libcore.net.http.HttpEngine.sendSocketRequest(HttpEngine.java:289)
02-27 11:37:39.511: E/com.p27_2.GCMIntentService(1684):     at libcore.net.http.HttpEngine.sendRequest(HttpEngine.java:239)
02-27 11:37:39.511: E/com.p27_2.GCMIntentService(1684):     at libcore.net.http.HttpURLConnectionImpl.connect(HttpURLConnectionImpl.java:80)
02-27 11:37:39.511: E/com.p27_2.GCMIntentService(1684):     at libcore.net.http.HttpURLConnectionImpl.getOutputStream(HttpURLConnectionImpl.java:188)
02-27 11:37:39.511: E/com.p27_2.GCMIntentService(1684):     at com.google.api.client.http.javanet.NetHttpRequest.execute(NetHttpRequest.java:80)
02-27 11:37:39.511: E/com.p27_2.GCMIntentService(1684):     at com.google.api.client.http.HttpRequest.execute(HttpRequest.java:1009)
02-27 11:37:39.511: E/com.p27_2.GCMIntentService(1684):     at com.google.api.client.googleapis.services.AbstractGoogleClientRequest.executeUnparsed(AbstractGoogleClientRequest.java:407)
02-27 11:37:39.511: E/com.p27_2.GCMIntentService(1684):     at com.google.api.client.googleapis.services.AbstractGoogleClientRequest.executeUnparsed(AbstractGoogleClientRequest.java:340)
02-27 11:37:39.511: E/com.p27_2.GCMIntentService(1684):     at com.google.api.client.googleapis.services.AbstractGoogleClientRequest.execute(AbstractGoogleClientRequest.java:458)
02-27 11:37:39.511: E/com.p27_2.GCMIntentService(1684):     at com.p27_2.GCMIntentService.onRegistered(GCMIntentService.java:169)
02-27 11:37:39.511: E/com.p27_2.GCMIntentService(1684):     at com.google.android.gcm.GCMBaseIntentService.handleRegistration(GCMBaseIntentService.java:251)
02-27 11:37:39.511: E/com.p27_2.GCMIntentService(1684):     at com.google.android.gcm.GCMBaseIntentService.onHandleIntent(GCMBaseIntentService.java:153)
02-27 11:37:39.511: E/com.p27_2.GCMIntentService(1684):     at android.app.IntentService$ServiceHandler.handleMessage(IntentService.java:65)
02-27 11:37:39.511: E/com.p27_2.GCMIntentService(1684):     at android.os.Handler.dispatchMessage(Handler.java:99)
02-27 11:37:39.511: E/com.p27_2.GCMIntentService(1684):     at android.os.Looper.loop(Looper.java:137)
02-27 11:37:39.511: E/com.p27_2.GCMIntentService(1684):     at android.os.HandlerThread.run(HandlerThread.java:60)
02-27 11:37:39.523: V/GCMBaseIntentService(1684): Releasing wakelock
02-27 11:37:39.562: D/dalvikvm(1684): GC_CONCURRENT freed 134K, 7% free 8586K/9159K, paused 18ms+7ms, total 70ms

非常感谢。

4

3 回答 3

3
  1. 确保在 CloudEndPointUtils 类中将常量 LOCAL_ANDROID_RUN 设置为 false,这意味着我们的服务器未在本地设置。
  2. 通过右键单击项目->google->部署到应用引擎,将您的 -AppEngine 项目部署到 google appEngine。
  3. 将部署到 CloudEndPints.java 后显示的 url 添加到变量为 LOCAL_APP_ENGINE_SERVER_URL
于 2014-03-13T07:50:34.573 回答
0

您的错误 ,java.net.BindException: Address already in use表示本地 AppEngine 实例未正确启动。通常,当我尝试启动本地 GAE 实例时,当另一个 GAE 实例已经将自己绑定到端口(即我启动它两次)时,我会看到此错误,但在这种情况下,您的 Android 应用程序应该与第一个实例通信并且仍然功能。

您的问题有所不同——由于某种原因,您的初始GAE 实例无法将自身绑定到端口(我们知道这一点是因为 Android 应用找不到任何本地 GAE 实例)。我会按顺序尝试以下操作,直到它起作用:

  1. 确保您的 GAE 运行配置设置为绑定到端口 8888(如果端口设置为 1024 或以下,操作系统可能会拒绝绑定尝试)。
  2. 假设您使用 Eclipse,请将您的 GAE 运行配置更改为“自动选择未使用的端口”,然后查看它是否可以正常启动。如果是,则将此端口设置为在您的 GAE 运行配置和 Android 应用程序中使用的端口。如果这解决了它并且您很好奇,您可能想查看已经绑定到端口 8888 的内容。
  3. 找到一个绝对没有绑定到任何东西的端口(1024 以上),然后在您的 GAE 运行配置中尝试。
  4. 如果你到了这一点,你将无法绑定到任何端口,这很奇怪。如果涉及到这个,请回信=)
于 2013-03-21T05:27:27.080 回答
0

我遇到了同样的问题:使用 eclipse android 应用引擎连接项目,在具有 localhost 后端的模拟器上注册云端点服务器成功,而在部署了应用引擎后端的设备上运行时失败。在清除设备上的缓存并搜索答案 3 小时后,我做了以下对我有用的操作,现在在设备上成功注册了云端点,我可以将 GCM 发送到我的设备。

  1. 右键单击客户端项目> android工具>添加支持库
  2. 右键单击服务器端项目 > google > 生成云端点客户端库
  3. delete the app from your phone and clear your phones cache ( for galaxy nexus jelly bean: settings > storage > tap cached data)
  4. make sure the server is not running on your localhost currently
  5. reinstall the app from your computer since you have just updated the support libraries

Hope that helps!!

于 2013-08-01T06:59:57.103 回答