吾生也有涯,而知也无涯。这篇文章主要讲述Android Socket发送信息时闪退相关的知识,希望能为你提供帮助。
尝试android写Socket通信的时候,遇到的个坑,记录一下:
1、无法建立连接。
原因:没有添加网络使用权限请求;
解决方式:在"AndroidMainfest.xml"中添加<
uses-permission android:name="android.permission.INTERNET"/>
2、建立连接后正常接收信息,但发送信息时直接闪退,LogCat中异常提示为:android.os.NetworkOnMainThreadException
【Android Socket发送信息时闪退】原因:百度了一圈,发现是在Android 7版本后才出现的,对主线程上的一个TCP Socket的写入操作严格检查,也就是不能在主线程中进行Socket写入发送。
解决方式:新建线程发送。
3、新建发送信息的线程,仍然闪退
原因:输出流也需要在新建的线程中new一个
成功发送的代码如下
new Thread(new Runnable(){ @Override public void run() { try { //输出流写入发送编辑框的信息并指定类型UTF-8,注意要加换行 String str="TestString"; if(socket==null) return; BufferedWriter outputStream=new BufferedWriter(new OutputStreamWriter(socket.getOutputStream())); outputStream.write(str); //输出流发送至服务器 outputStream.flush(); } catch (UnsupportedEncodingException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } }).start();
推荐阅读
- Android_基于监听的事件处理机制
- Android_存储访问框架SAF
- 软件测试-AndroidMonkey全参数(包含隐藏参数)
- 记录一次安卓动态调试lib库
- appium---学习
- Android中ProjectModule的区别
- HSBImageView--android--可以设置HSB值的imageview
- 安卓,ListView,打气筒的初次使用
- 关于Sign in with Apple 后台验证的一些记录