欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

学习笔记--Android TCP客户端与服务器端不能通信之一

程序员文章站 2022-03-26 19:45:05
学习笔记–Android TCP客户端与服务器端不能通信之一android.os.NetworkOnMainThreadException报错 最近公司要我做一个Android端TCP通信控制视频播放软件,我做了TCP服务端和TCP客户端,用服务器端软件来控制TCP端视频播放器播放视频的功能,然而做好之后却遇到了不同Android版本服务端和客户端无法通信的问题,然后我进行了各种操作测试愁了两天发量更少了,发现同一版本的Android端可以进行通信,不同版本之间无法进行通信,最后发现是android.o...

学习笔记–Android TCP客户端与服务器端不能通信之一

android.os.NetworkOnMainThreadException报错

最近公司要我做一个Android端TCP通信控制视频播放软件,我做了TCP服务端和TCP客户端,用服务器端软件来控制TCP端视频播放器播放视频的功能,然而做好之后却遇到了不同Android版本服务端和客户端无法通信的问题,然后我进行了各种操作测试愁了两天发量更少了,发现同一版本的Android端可以进行通信,不同版本之间无法进行通信,最后发现是android.os.NetworkOnMainThreadException报错,查阅资料和大佬的文章发现Android 4.0之后的版本网络连接不能放在主线程,否则会保错不能使用。

解决方法:

TCP服务端添加下列代码

1.网络请求数据量很小的话可以加入这段代码

@Override
protected void onCreate(Bundle savedInstanceState) {
	super.onCreate(savedInstanceState);
	setContentView(R.layout.activity_main);
	
		 //Android 4.0 之后不能在主线程中给客户端发送消息,网络请求数据量很小的话使用此代码可以进行通信
		 if (android.os.Build.VERSION.SDK_INT > 9) {
		     StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build();
		     StrictMode.setThreadPolicy(policy);
		  }
}

2.启动一条子线程进行你的网络请求,推荐使用这种

  // Android 4.0 之后不能在主线程中给客户端发送消息
      new Thread(new Runnable(){
          @Override
          public void run() {
              cachedImage = asyncImageLoader.loadDrawable(imageUrl, position);
              imageView.setImageDrawable(cachedImage);
          }
      }).start();

总结

终于解决这个问题了,满满的成就感,真是泰开心了,学习了就要分享,大家一起努力哈,如果有问题评论区见。
感谢大佬的分享:https://blog.csdn.net/qq_29477223/article/details/81027716

本文地址:https://blog.csdn.net/qq_40397259/article/details/109000772