Android的socket编程注意点
来源:互联网 发布:西安交通大学网络导航 编辑:程序博客网 时间:2024/05/17 03:13
解决了在Android 2.3下能够正常连接socket,而Android 4.4下却崩溃的问题。
首先连接的方法为
socket = new Socket();SocketAddress socAdd = new InetSocketAddress("192.168.23.1", 30000);socket.connect(socAdd, 5000); //2.3正常4.4出错2.3下正常连接,而4.4崩溃,一直找不到原因,后来google推荐最好不要在主进程中就进行socket连接
故编写了线程
class MyThread extends Thread{ MyThread(){ super(); } public void run(){ try{ socket = new Socket(); SocketAddress socAdd = new InetSocketAddress("192.168.23.1", 30000); socket.connect(socAdd, 5000); //2.3正常4.4出错 os = socket.getOutputStream(); is = new BufferedReader(new InputStreamReader(socket.getInputStream())); os.write("android\n".getBytes()); //测试连接 os.flush(); /*bundle.putString("msg", buffer.toString()); msg.setData(bundle); myHandler.sendMessage(msg);*/ }catch(SocketException se){ se.printStackTrace(); } catch(IOException e){ e.printStackTrace(); } } }
当时使用的调用方法为
myThread = new MyThread(); myThread.run();结果仍然报错,socket.connect()连接不能,却没有捕获到socketConnectException异常
错误为android.os.NetworkOnMainThreadException
原来是使用Thread的run和start有区别
run仍然只有一个线程,而start才是真正的多线程
改成调用start()
单步调试能够通过start()
却在接下来的一步os.write("start connected")出错。
错误为java.lang.NullPointerException
且发现start()并没有向服务器写入android测试字符串
原来start调用后,run()尚未运行完,而主进程已经进行到下一行os.write(),
故os尚未对某一实例进行引用,仍未空指针。
将thread的创建改在startButtonOnClick之前,能够正常连接
0 0
- Android的socket编程注意点
- socket编程注意点
- Android Socket编程所注意的问题
- android socket 编程 值得注意的地方
- Android 系统中 socket 编程需要注意的
- android studio使用ndk编程的注意点
- 国际化编程的注意点
- 同步编程的注意点
- twill编程的注意点
- Android socket网络编程要注意
- socket开发注意点
- Android autoLink的注意点
- 开发android的注意点
- Android 生命周期的注意点
- socket编程需要注意的问题
- 多线程编程需要注意的几点
- JDBC编程需要注意的几点
- 学习编程需要注意的几点
- 军训 (水题)
- Hibernate Validator学习
- ASP.NET MVC 3 Razor 视图引擎 基本语法
- 记录
- Kinect V2 开发专题(1)软硬件需求与安装测试
- Android的socket编程注意点
- The difference between github and svn
- GIT使用规范
- android之service简介
- 几款开源分词地址
- find -exec 与 xargs的区别与使用
- Java从网络中请求获取JSon数据以及解析JSON数据----(自创,请注明)
- UICollectionViewFlowLayout 和collectionView的api的一些解释
- Java 中synchronized的理解