关于android socket编程时,“Error:ShouldNotReachHere()”错误的原因
来源:互联网 发布:淘宝运费险价格表 编辑:程序博客网 时间:2024/06/05 17:38
在android项目中实现Socket通信,服务器端使用main方法创建ServerSocket,运行启动服务器时报错“Error:ShouldNotReachHere()”
原因分析:java中使用main函数作为应用程序的接口,class的生命周期始于main方法,结束与main方法。android虽然使用java语法,但是却不适用main作为程序入口,一个activity启动时要经过onCreate()方法、onStart()、onResume()方法才算完全启动,而且这些方法都是自动调用的,这是与java application运行的最大不同之处。所以如果你新建的是android project。那么程序默认使用的就是android.jar来作为程序运行时环境,但是由于我们按照惯例将服务端ServerSocket的启动放在main方法中,android无法解析,所以会报出该错误,就是说程序永远不会执行到此处,这种错误平时也常见。
解决方案一:隔离服务器端和客户端。将服务器端ServerSocket的创建移到Android项目之外的一个Java Project中,先运行这个Java Project,启动ServerSocket,再运行客户端所在的Android Project
解决方案二:更改服务器端运行时环境。将ServerSocket依旧写在Java类中的main方法中,在IDE左边的Package Exployer中选中项目,点击鼠标右键,选择“Run as——>Run configuration”,在弹出窗口的左边框内找到“Java application——>ServerSocket类”,在右边框内找到Classpath选项,找到其中的Bootstrap Entries,选中其中的Android.jar,点击右边remove按钮将其删除,然后点击Advanced按钮,选择Add Libaby选项,点击ok按钮,在弹出的对话框中选择JRE System Library,点击“next”按钮,选择Workplace Default JRE选项,点击“finish”按钮即可完成配置
解决方案三:使用Android中的Activity创建服务器ServerSocket。这种方案应该将服务器和客户端都写在同一个Activity中的不同方法中,先启动服务器方法,再启动客户端方法。这是因为Android中一个Activity就代表了一个屏幕,如果你将服务器和客户端写在不同的Activity中,先启动服务器Activity,再跳转到客户端Activity,那么服务器Activity就会执行onPause()回调方法,相当于关闭Socket服务器了
解决方案四:使用Android中的Service创建服务器ServerSocket。创建一个Service用来存放Socket服务器代码,再创建一个Activity来存放Socket客户端代码和显示通信信息。运行时先通过Activity启动Service,再启动客户端代码的Activity。由于Android中的Service是后台运行,所以即使跳转Activity也不会关闭服务
这四种方案中,第一种将服务器和客户端分隔在不同项目中,不利于管理;第三种方案将客户端和服务器代码写在同一个类中,显得杂乱而且不符合实际情况。个人觉得可取的是第二种和第四种方案,特别是第四种方案。第二种方案夹杂了Android和Java环境处理,第四种方案则是纯粹的Android应用,而且用到了Android中的Service,“Service——Activity”更符合Socket的“服务器——客户端”模式。
转载地址:http://blog.csdn.net/knlnzhao/article/details/7265976
- 关于android socket编程时,“Error:ShouldNotReachHere()”错误的原因
- 关于android socket编程时,“Error:ShouldNotReachHere()”错误的原因
- “Error:ShouldNotReachHere()”错误的原因
- “Error:ShouldNotReachHere()”错误的原因
- Android 中 Error: ShouldNotReachHere()
- Android Error: ShouldNotReachHere()
- android编程中遇到的关于Error parsing XML: unbound prefix错误的原因及解决办法
- 我的Android进阶之旅------>解决 Error: ShouldNotReachHere() 问题
- Error: ShouldNotReachHere()
- Error ShouldNotReachHere()
- Error ShouldNotReachHere()
- Error: ShouldNotReachHere()
- 爬虫时碰到的socket.error: [Errno 10060]错误的原因以及解决方法
- 举例说明android编程中遇到Error parsing XML: unbound prefix错误的原因及解决办法
- 关于 Mac OS系统中编程时出现的segment error 和bus error原因描述
- 举例说明android编程中遇到的关于android.view.InflateException错误的原因及解决办法
- Socket编程,出现 Socket operation on non-socket 错误的原因
- 关于使用SOCKET发送数据时“目标积极积极拒绝,无法连接”错误的原因分析
- break,continue,return等控制语句的使用
- vector 容器详细用法
- 在SrollView中嵌套GridView或ListView
- Sequential List(顺序表)
- Neither BindingResult nor plain target object for bean name 'user' available
- 关于android socket编程时,“Error:ShouldNotReachHere()”错误的原因
- 远程访问MySQL实现
- const用法详解
- 未能加载类型“FredCK.FCKeditorV2.FileBrowser.Config” 错误解决办法
- 14--4--2选择法排数字
- 几个C#日期、时间验证的正则表达式
- 黑马程序员之IO流
- UVA - 12124 Assemble
- cocos2dx 移值到android平台问题总结