Android 客户端 TCP socket出现 android.os.NetworkOnMainThreadException
来源:互联网 发布:电影下载 知乎 编辑:程序博客网 时间:2024/05/22 05:26
Android 客户端 TCP socket出现 android.os.NetworkOnMainThreadException
这个问题主要是把网络操作放在了主线程当中,如果将套接字初始化放于一个继承thread的类当中也是算在主线程,如
public class ReceiveThread extends Thread{Socket socket;InputStream inputStream ;OutputStream outputStream; private String str; private byte[] buffer ;public ReceiveThread() {// TODO Auto-generated constructor stub// 创建一个Socket对象,并指定服务端的IP及端口号try {//socket = new Socket("192.168.191.1", 6800);//InetAddress.getByName(System.out.println("还未连接1!!!");socket=new Socket();System.out.println("还未连接2!!!");socket.connect(new InetSocketAddress("192.168.191.1", 6800),200);System.out.println("连接成功!!!");System.out.println("--step2-->>>");//inputStream = socket.getInputStream();System.out.println("--step3-->>>");//outputStream = socket.getOutputStream();System.out.println("--step4-->>>");System.out.println("--inputStream-->>>"+inputStream.toString());System.out.println("--outputStream-->>>"+outputStream.toString());//向服务器端发送消息} catch (UnknownHostException e) {// TODO: handle exceptione.printStackTrace();} catch (Exception e) {// TODO Auto-generated catch blocke.printStackTrace();}}
解决上面问题的其中第一种办法是:
上面的代码的套接字相当于在主线程中,这是不可取的,应当放入run()当中才行
@Overridepublic void run() {Socket socket;InputStream inputStream ;OutputStream outputStream = null; String str=null; byte[] buffer ;try {//socket = new Socket("192.168.191.1", 6800);//InetAddress.getByName(System.out.println("还未连接1!!!");socket=new Socket();System.out.println("还未连接2!!!");socket.connect(new InetSocketAddress("192.168.191.1", 6800),200);System.out.println("连接成功!!!");System.out.println("--step2-->>>");inputStream = socket.getInputStream();System.out.println("--step3-->>>");outputStream = socket.getOutputStream();System.out.println("--step4-->>>");System.out.println("--inputStream-->>>"+inputStream.toString());System.out.println("--outputStream-->>>"+outputStream.toString());//向服务器端发送消息} catch (UnknownHostException e) {// TODO: handle exceptione.printStackTrace();} catch (Exception e) {// TODO Auto-generated catch blocke.printStackTrace();}Message msg=new Message();msg.what =1;msg.obj =str;mHandler.sendMessage(msg);// 发送读取的数据到服务端}
第二种解决方法:
@SuppressLint("NewApi") public class MainActivity extends Activity implements OnClickListener{EditText edit_data=null;Button button_connect=null;Button button_disconnect=null;//@SuppressLint("NewApi") 是使在主线程中能运行网络服务 @SuppressLint("NewApi") @TargetApi(Build.VERSION_CODES.GINGERBREAD) @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); //是使在主线程中能运行网络服务 if (android.os.Build.VERSION.SDK_INT > 9) { StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build(); StrictMode.setThreadPolicy(policy);} edit_data=(EditText) this.findViewById(R.id.edit_data); button_connect =(Button) this.findViewById(R.id.button_connect); button_disconnect =(Button) this.findViewById(R.id.button_disconnect); button_connect.setOnClickListener(this); button_disconnect.setOnClickListener(this); } @Override public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu; this adds items to the action bar if it is present. getMenuInflater().inflate(R.menu.main, menu); return true; } Handler mHandler=new Handler(){ public void handMessage(Message msg) { switch (msg.what) {case 1: String strRcv = (msg.obj).toString(); edit_data.setText("接收到数据: " + strRcv); Log.v("Leo: Rcv: ", strRcv); // 显示接收到的数据 // mTextView.setText((msg.obj).toString()); break;} } };
}
上面有三处注释的就是起到能在主线程中运行网络服务的作用
0 0
- Android 客户端 TCP socket出现 android.os.NetworkOnMainThreadException
- 出现android.os.NetworkOnMainThreadException异常
- 访问WebService 出现 android.os.NetworkOnMainThreadException异常
- 解决出现android.os.NetworkOnMainThreadException异常
- Android 3.0 访问WebService或Socket 出现 android.os.NetworkOnMainThreadException异常
- 解决android socket编程出现的Caused by: android.os.NetworkOnMainThreadException错误
- Android 3.0 访问WebService或Socket 出现 android.os.NetworkOnMainThreadException异常
- android.os.NetworkOnMainThreadException问题
- android.os.NetworkOnMainThreadException问题
- android.os.NetworkOnMainThreadException
- android.os.NetworkOnMainThreadException
- android.os.NetworkOnMainThreadException
- android.os.NetworkOnMainThreadException异常
- 关于android.os.NetworkOnMainThreadException
- android.os.NetworkOnMainThreadException
- android.os.NetworkOnMainThreadException
- android.os.NetworkOnMainThreadException
- 异常:android.os.NetworkOnMainThreadException
- Android6.0极其以上系统获取Dangerous系统权限问题及其解决方案
- GPG入门教程
- 数据库封装Dbutil类
- tabBarItem设置背景色,标题
- ArcGIS 删除地理转换
- Android 客户端 TCP socket出现 android.os.NetworkOnMainThreadException
- muduo库阅读(29)——Net部分:Reactor(EventLoop事件循环)
- [原]在Windows中编译OpenH323(下)---------编译OpenH323
- 神经网络编程入门
- 关于时间的逻辑
- 实习整理(六)
- Qt继电器控制板代码
- android之 MAT、DDMS 等内存查看工具
- 根据传智播客ibatis视频教程编写的入门例子