简体   繁体   English

Android 上的 Phonegap:为什么触发后退按钮会导致 SocketException?

[英]Phonegap on Android: Why does triggering the backbutton cause a SocketException?

I created an Android App with Phonegap.我用 Phonegap 创建了一个 Android 应用程序。

Within my JavaScript code I do:在我的 JavaScript 代码中,我这样做:

window.location.href = "http://m.facebook.com/dialog/" + params;

.. because I want to redirect to Facebook. .. 因为我想重定向到 Facebook。 That works good so far but when I press the back button of the Android device the app shows a popup with error message:到目前为止效果很好,但是当我按下 Android 设备的后退按钮时,应用程序会显示一个带有错误消息的弹出窗口:

Application Error
A network error occured. (file:///android_asset//www/index.html#article?id=61142746)

So I checked the logs and this is what's being printed when I go to the Facebook page:所以我检查了日志,这是我访问 Facebook 页面时打印的内容:

11-30 16:50:25.480: I/PRIME(12998): <CallBackProxy> Send to WebViewClient.
11-30 16:50:25.480: D/CordovaWebView(12998): >>> loadUrl(http://m.facebook.com/dialog/feed?app_id=408479945865356&link=http://nachrichten.mydomain.de/obama-geraet-wegen-seiner-personalpolitik-weiter-in-bredouille/id_61142746/index&picture=http://mcp.mydomain.de/images/id_61143440/af_amp/bilder/uno-botschafterin-und-obama-vertraute-susan-rice-unter-beschuss.jpg&name=Skandalkandidatin%20bringt%20Obama%20in%20die%20Bredouille%0A&caption=mydomain.de%20Nachrichten&description=Skandalkandidatin%20bringt%20Obama%20in%20die%20Bredouille%0A...&redirect_uri=http://nachrichten.mydomain.de/obama-geraet-wegen-seiner-personalpolitik-weiter-in-bredouille/id_61142746/index)
11-30 16:50:25.490: D/CordovaWebView(12998): >>> loadUrlNow()
11-30 16:50:25.620: W/webcore(12998): [webViewCore::webkitDraw] defer message ====
11-30 16:50:25.640: W/System.err(12998): java.net.SocketException: Socket closed
11-30 16:50:25.640: W/System.err(12998):    at libcore.io.Posix.accept(Native Method)
11-30 16:50:25.640: W/System.err(12998):    at libcore.io.BlockGuardOs.accept(BlockGuardOs.java:55)
11-30 16:50:25.640: W/System.err(12998):    at java.net.PlainSocketImpl.accept(PlainSocketImpl.java:98)
11-30 16:50:25.640: W/System.err(12998):    at java.net.ServerSocket.implAccept(ServerSocket.java:202)
11-30 16:50:25.640: W/System.err(12998):    at java.net.ServerSocket.accept(ServerSocket.java:127)
11-30 16:50:25.640: W/System.err(12998):    at org.apache.cordova.CallbackServer.run(CallbackServer.java:195)
11-30 16:50:25.640: W/System.err(12998):    at java.lang.Thread.run(Thread.java:864)
11-30 16:50:25.650: D/DroidGap(12998): onMessage(onPageStarted,http://m.facebook.com/dialog/feed?app_id=408479945865356&link=http://nachrichten.mydomain.de/obama-geraet-wegen-seiner-personalpolitik-weiter-in-bredouille/id_61142746/index&picture=http://mcp.mydomain.de/images/id_61143440/af_amp/bilder/uno-botschafterin-und-obama-vertraute-susan-rice-unter-beschuss.jpg&name=Skandalkandidatin%20bringt%20Obama%20in%20die%20Bredouille%0A&caption=mydomain.de%20Nachrichten&description=Skandalkandidatin%20bringt%20Obama%20in%20die%20Bredouille%0A...&redirect_uri=http://nachrichten.mydomain.de/obama-geraet-wegen-seiner-personalpolitik-weiter-in-bredouille/id_61142746/index)
11-30 16:50:25.830: I/PRIME(12998): <CallBackProxy> Send to WebViewClient.
11-30 16:50:25.830: D/CordovaWebView(12998): >>> loadUrl(http://m.facebook.com/login.php?app_id=408479945865356&skip_api_login=1&cancel=http%3A%2F%2Fnachrichten.mydomain.de%2Fobama-geraet-wegen-seiner-personalpolitik-weiter-in-bredouille%2Fid_61142746%2Findex&next=http%3A%2F%2Fm.facebook.com%2Fdialog%2Ffeed%3F_path%3Dfeed%26app_id%3D408479945865356%26redirect_uri%3Dhttp%253A%252F%252Fnachrichten.mydomain.de%252Fobama-geraet-wegen-seiner-personalpolitik-weiter-in-bredouille%252Fid_61142746%252Findex%26display%3Dtouch%26link%3Dhttp%253A%252F%252Fnachrichten.mydomain.de%252Fobama-geraet-wegen-seiner-personalpolitik-weiter-in-bredouille%252Fid_61142746%252Findex%26picture%3Dhttp%253A%252F%252Fmcp.mydomain.de%252Fimages%252Fid_61143440%252Faf_amp%252Fbilder%252Funo-botschafterin-und-obama-vertraute-susan-rice-unter-beschuss.jpg%26name%3DSkandalkandidatin%2Bbringt%2BObama%2Bin%2Bdie%2BBredouille%250A%26caption%3Dmydomain.de%2BNachrichten%26description%3DSkandalkandidatin%2Bbringt%2BObama%2Bin%2Bdie%2BBredouille%250A...%26from_login%3D1%26client_id%3D408479945865356&rcount=1&_rdr)
11-30 16:50:25.830: D/CordovaWebView(12998): >>> loadUrlNow()
11-30 16:50:25.830: D/skia(12998): notifyPluginsOnFrameLoad not postponed
11-30 16:50:25.830: D/Cordova(12998): onPageFinished(http://m.facebook.com/login.php?app_id=408479945865356&skip_api_login=1&cancel=http%3A%2F%2Fnachrichten.mydomain.de%2Fobama-geraet-wegen-seiner-personalpolitik-weiter-in-bredouille%2Fid_61142746%2Findex&next=http%3A%2F%2Fm.facebook.com%2Fdialog%2Ffeed%3F_path%3Dfeed%26app_id%3D408479945865356%26redirect_uri%3Dhttp%253A%252F%252Fnachrichten.mydomain.de%252Fobama-geraet-wegen-seiner-personalpolitik-weiter-in-bredouille%252Fid_61142746%252Findex%26display%3Dtouch%26link%3Dhttp%253A%252F%252Fnachrichten.mydomain.de%252Fobama-geraet-wegen-seiner-personalpolitik-weiter-in-bredouille%252Fid_61142746%252Findex%26picture%3Dhttp%253A%252F%252Fmcp.mydomain.de%252Fimages%252Fid_61143440%252Faf_amp%252Fbilder%252Funo-botschafterin-und-obama-vertraute-susan-rice-unter-beschuss.jpg%26name%3DSkandalkandidatin%2Bbringt%2BObama%2Bin%2Bdie%2BBredouille%250A%26caption%3Dmydomain.de%2BNachrichten%26description%3DSkandalkandidatin%2Bbringt%2BObama%2Bin%2Bdie%2BBredouille%250A...%26from_login%3D1%26client_id%3D408479945865356&rcount=1&_rdr)
11-30 16:50:25.830: D/CordovaWebView(12998): >>> loadUrlNow()
11-30 16:50:25.830: D/DroidGap(12998): onMessage(onNativeReady,null)
11-30 16:50:25.830: D/DroidGap(12998): onMessage(onPageFinished,http://m.facebook.com/login.php?app_id=408479945865356&skip_api_login=1&cancel=http%3A%2F%2Fnachrichten.mydomain.de%2Fobama-geraet-wegen-seiner-personalpolitik-weiter-in-bredouille%2Fid_61142746%2Findex&next=http%3A%2F%2Fm.facebook.com%2Fdialog%2Ffeed%3F_path%3Dfeed%26app_id%3D408479945865356%26redirect_uri%3Dhttp%253A%252F%252Fnachrichten.mydomain.de%252Fobama-geraet-wegen-seiner-personalpolitik-weiter-in-bredouille%252Fid_61142746%252Findex%26display%3Dtouch%26link%3Dhttp%253A%252F%252Fnachrichten.mydomain.de%252Fobama-geraet-wegen-seiner-personalpolitik-weiter-in-bredouille%252Fid_61142746%252Findex%26picture%3Dhttp%253A%252F%252Fmcp.mydomain.de%252Fimages%252Fid_61143440%252Faf_amp%252Fbilder%252Funo-botschafterin-und-obama-vertraute-susan-rice-unter-beschuss.jpg%26name%3DSkandalkandidatin%2Bbringt%2BObama%2Bin%2Bdie%2BBredouille%250A%26caption%3Dmydomain.de%2BNachrichten%26description%3DSkandalkandidatin%2Bbringt%2BObama%2Bin%2Bdie%2BBredouille%250A...%26from_login%3D1%26client_id%3D408479945865356&rcount=1&_rdr)
11-30 16:50:25.840: D/DroidGap(12998): onMessage(onPageStarted,http://m.facebook.com/login.php?app_id=408479945865356&skip_api_login=1&cancel=http%3A%2F%2Fnachrichten.mydomain.de%2Fobama-geraet-wegen-seiner-personalpolitik-weiter-in-bredouille%2Fid_61142746%2Findex&next=http%3A%2F%2Fm.facebook.com%2Fdialog%2Ffeed%3F_path%3Dfeed%26app_id%3D408479945865356%26redirect_uri%3Dhttp%253A%252F%252Fnachrichten.mydomain.de%252Fobama-geraet-wegen-seiner-personalpolitik-weiter-in-bredouille%252Fid_61142746%252Findex%26display%3Dtouch%26link%3Dhttp%253A%252F%252Fnachrichten.mydomain.de%252Fobama-geraet-wegen-seiner-personalpolitik-weiter-in-bredouille%252Fid_61142746%252Findex%26picture%3Dhttp%253A%252F%252Fmcp.mydomain.de%252Fimages%252Fid_61143440%252Faf_amp%252Fbilder%252Funo-botschafterin-und-obama-vertraute-susan-rice-unter-beschuss.jpg%26name%3DSkandalkandidatin%2Bbringt%2BObama%2Bin%2Bdie%2BBredouille%250A%26caption%3Dmydomain.de%2BNachrichten%26description%3DSkandalkandidatin%2Bbringt%2BObama%2Bin%2Bdie%2BBredouille%250A...%26from_login%3D1%26client_id%3D408479945865356&rcount=1&_rdr)
11-30 16:50:26.670: D/skia(12998): notifyPluginsOnFrameLoad not postponed
11-30 16:50:26.680: D/Cordova(12998): onPageFinished(http://m.facebook.com/login.php?app_id=408479945865356&skip_api_login=1&cancel=http%3A%2F%2Fnachrichten.mydomain.de%2Fobama-geraet-wegen-seiner-personalpolitik-weiter-in-bredouille%2Fid_61142746%2Findex&next=http%3A%2F%2Fm.facebook.com%2Fdialog%2Ffeed%3F_path%3Dfeed%26app_id%3D408479945865356%26redirect_uri%3Dhttp%253A%252F%252Fnachrichten.mydomain.de%252Fobama-geraet-wegen-seiner-personalpolitik-weiter-in-bredouille%252Fid_61142746%252Findex%26display%3Dtouch%26link%3Dhttp%253A%252F%252Fnachrichten.mydomain.de%252Fobama-geraet-wegen-seiner-personalpolitik-weiter-in-bredouille%252Fid_61142746%252Findex%26picture%3Dhttp%253A%252F%252Fmcp.mydomain.de%252Fimages%252Fid_61143440%252Faf_amp%252Fbilder%252Funo-botschafterin-und-obama-vertraute-susan-rice-unter-beschuss.jpg%26name%3DSkandalkandidatin%2Bbringt%2BObama%2Bin%2Bdie%2BBredouille%250A%26caption%3Dmydomain.de%2BNachrichten%26description%3DSkandalkandidatin%2Bbringt%2BObama%2Bin%2Bdie%2BBredouille%250A...%26from_login%3D1%26client_id%3D408479945865356&rcount=1&_rdr)
11-30 16:50:26.680: D/CordovaWebView(12998): >>> loadUrlNow()
11-30 16:50:26.680: D/DroidGap(12998): onMessage(onNativeReady,null)
11-30 16:50:26.680: D/DroidGap(12998): onMessage(onPageFinished,http://m.facebook.com/login.php?app_id=408479945865356&skip_api_login=1&cancel=http%3A%2F%2Fnachrichten.mydomain.de%2Fobama-geraet-wegen-seiner-personalpolitik-weiter-in-bredouille%2Fid_61142746%2Findex&next=http%3A%2F%2Fm.facebook.com%2Fdialog%2Ffeed%3F_path%3Dfeed%26app_id%3D408479945865356%26redirect_uri%3Dhttp%253A%252F%252Fnachrichten.mydomain.de%252Fobama-geraet-wegen-seiner-personalpolitik-weiter-in-bredouille%252Fid_61142746%252Findex%26display%3Dtouch%26link%3Dhttp%253A%252F%252Fnachrichten.mydomain.de%252Fobama-geraet-wegen-seiner-personalpolitik-weiter-in-bredouille%252Fid_61142746%252Findex%26picture%3Dhttp%253A%252F%252Fmcp.mydomain.de%252Fimages%252Fid_61143440%252Faf_amp%252Fbilder%252Funo-botschafterin-und-obama-vertraute-susan-rice-unter-beschuss.jpg%26name%3DSkandalkandidatin%2Bbringt%2BObama%2Bin%2Bdie%2BBredouille%250A%26caption%3Dmydomain.de%2BNachrichten%26description%3DSkandalkandidatin%2Bbringt%2BObama%2Bin%2Bdie%2BBredouille%250A...%26from_login%3D1%26client_id%3D408479945865356&rcount=1&_rdr)
11-30 16:50:26.840: D/SQLiteDatabase(12998): Create pool connection
11-30 16:50:26.840: D/SqliteDatabaseCpp(12998): DB info: open db, path = /data/data/de.mydomain2.my_place_de/databases , key = sefraes, flag = 1, file size = 12288
11-30 16:50:26.840: D/SqliteDatabaseCpp(12998): DB info: path = /data/data/de.mydomain2.my_place_de/databases , key = sefraes, handle: 0xb14f98, type: r, r/w: (1,1), mode: wal, disk free size: 1753 M
11-30 16:50:26.890: I/SqliteDatabaseCpp(12998): sqlite returned: error code = 1, msg = no such table: __version__

And this is what the logs say when I press the back button:这就是我按下后退按钮时日志所说的内容:

11-30 16:50:52.210: D/CordovaWebView(12998): >>> loadUrl(file:///android_asset/www/index.html#article?id=61142746)
11-30 16:50:52.210: D/CordovaWebView(12998): >>> loadUrlNow()
11-30 16:50:52.220: D/chromium(12998): Unknown chromium error: -6
11-30 16:50:52.220: D/DroidGap(12998): onMessage(onPageStarted,file:///android_asset/www/index.html#article?id=61142746)
11-30 16:50:52.230: D/Cordova(12998): CordovaWebViewClient.onReceivedError: Error code=-1 Description=Es ist ein Netzwerkfehler aufgetreten. URL=file:///android_asset/www/index.html#article?id=61142746
11-30 16:50:52.230: D/DroidGap(12998): onMessage(onReceivedError,{"errorCode":-1,"url":"file:\/\/\/android_asset\/www\/index.html#article?id=61142746","description":"Es ist ein Netzwerkfehler aufgetreten."})
11-30 16:50:52.320: D/skia(12998): notifyPluginsOnFrameLoad not postponed
11-30 16:50:52.350: W/System.err(12998): java.net.SocketException: Socket closed
11-30 16:50:52.350: W/System.err(12998):    at libcore.io.Posix.accept(Native Method)
11-30 16:50:52.350: W/System.err(12998):    at libcore.io.BlockGuardOs.accept(BlockGuardOs.java:55)
11-30 16:50:52.350: W/System.err(12998):    at java.net.PlainSocketImpl.accept(PlainSocketImpl.java:98)
11-30 16:50:52.350: W/System.err(12998):    at java.net.ServerSocket.implAccept(ServerSocket.java:202)
11-30 16:50:52.350: W/System.err(12998):    at java.net.ServerSocket.accept(ServerSocket.java:127)
11-30 16:50:52.360: W/System.err(12998):    at org.apache.cordova.CallbackServer.run(CallbackServer.java:195)
11-30 16:50:52.360: W/System.err(12998):    at java.lang.Thread.run(Thread.java:864)
11-30 16:50:52.360: D/DroidGap(12998): onMessage(onPageStarted,file:///android_asset/www/index.html#article?id=61142746)
11-30 16:50:52.360: D/Cordova(12998): onPageFinished(file:///android_asset/www/index.html#article?id=61142746)
11-30 16:50:52.360: D/CordovaWebView(12998): >>> loadUrlNow()
11-30 16:50:52.370: D/DroidGap(12998): onMessage(onNativeReady,null)
11-30 16:50:52.370: D/DroidGap(12998): onMessage(onPageFinished,file:///android_asset/www/index.html#article?id=61142746)
11-30 16:50:52.370: D/SoftKeyboardDetect(12998): Ignore this event
11-30 16:50:52.390: D/Cordova(12998): onPageFinished(file:///android_asset/www/index.html#article?id=61142746)
11-30 16:50:52.390: D/CordovaWebView(12998): >>> loadUrlNow()
11-30 16:50:52.390: D/DroidGap(12998): onMessage(onNativeReady,null)
11-30 16:50:52.390: D/DroidGap(12998): onMessage(onPageFinished,file:///android_asset/www/index.html#article?id=61142746)

What's going on?这是怎么回事?


Note: This only happens on these devices.注意:这只发生在这些设备上。

  • HTC One宏达一号
  • Samsung Galaxy Note三星 Galaxy Note

It does NOT happen on:不会发生在:

  • HTC Sensation宏达动感
  • Samsung Galaxy S2三星 Galaxy S2
  • Samsung Galaxy S3三星Galaxy S3

The back button closes the app and that means the CallbackServer is shut down breaking the socket and that is what fires the exception.后退按钮关闭应用程序,这意味着 CallbackServer 关闭中断套接字,这就是触发异常的原因。 However, you will only see this on some phones as not all JavaScript/native communication takes place via the CallbackServer.但是,您只会在某些手机上看到这一点,因为并非所有 JavaScript/本机通信都是通过 CallbackServer 进行的。 We pick the best method available depending on what the phone is capable of.我们根据手机的功能选择可用的最佳方法。

Also, if you upgrade to PhoneGap 2.2.0 you'll never see that exception again as we've retired the CallbackServer.此外,如果您升级到 PhoneGap 2.2.0,您将永远不会再看到该异常,因为我们已经停用了 CallbackServer。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM