android .os.NetworkOnMainThreadException, когда кажется, что код сокета выполняется в другом потоке - PullRequest
0 голосов
/ 15 января 2020

ошибка

 W/System.err: android.os.NetworkOnMainThreadException
    W/System.err:     at android.os.StrictMode$AndroidBlockGuardPolicy.onNetwork(StrictMode.java:1147)
            at libcore.io.BlockGuardOs.connect(BlockGuardOs.java:110)
            at libcore.io.IoBridge.connectErrno(IoBridge.java:137)
            at libcore.io.IoBridge.connect(IoBridge.java:122)

код

  final Thread receivingserveur = new Thread() {
                                public void run() {
                                    int i=0;
                                    while(i<3) {
                                        try {
                                            System.out.println( "start client" );
                                            sock = new Socket( "90.57.69.108", 1234);
                                        } catch (IOException e) {
                                            e.printStackTrace();
                                        }
                                        try {
                                            sock.setTcpNoDelay( true );
                                        } catch (SocketException e) {
                                            e.printStackTrace();
                                        }



                                        try {
                                            dis = new DataInputStream( sock.getInputStream() );
                                        } catch (IOException e) {
                                            e.printStackTrace();
                                        }
                                        final String message_entrant21;
                                        handler.post( new Runnable() {

                                            @Override


                                            public void run() {


                                                Toast.makeText( getApplicationContext(), "start receiving data", Toast.LENGTH_SHORT ).show();
                                            }
                                        } );
                                        try {
                                            message_entrant21 = bufferedReader.readLine();
                                        } catch (IOException e) {
                                            e.printStackTrace();
                                        }
                                        handler.post( new Runnable() {

                                            @Override


                                            public void run() {


                                                Toast.makeText( getApplicationContext(), " received data", Toast.LENGTH_SHORT ).show();
                                            }
                                        } );


                                        handler.post( new Runnable() {

                                            @Override


                                            public void run() {

                                                TextView tv = (TextView) findViewById( R.id.textView4 );
                                                tv.setMovementMethod( LinkMovementMethod.getInstance() );
                                                tv.setText( Html.fromHtml( Message232 ) );
                                                Toast.makeText( getApplicationContext(), Message232, Toast.LENGTH_LONG ).show();
                                            }
                                        } );
                                        i += 1;
                                        try {
                                            sock.close();
                                        } catch (IOException e) {
                                            System.out.println( "error to send" );
                                            e.printStackTrace();
                                        }

                                    }


                                }
                            };
                            int i=0;


                            receivingserveur.run();

мой опрос

Я хотел бы знать, почему, когда я отправляю некоторые данные в потоке, l oop, что для меня кажется, что все не в основном потоке, так почему там его ошибка, которая говорит android.os.NetworkOnMainThreadException, когда для я нахожусь в новом потоке, может ли быть так, что прежде чем я выполню поток serveur, я выполню другой поток, который использует сокет, который соединяется, но на этот раз отправляет данные? Я не думаю, что это так, потому что другой поток не имеет того же имени, что и этот.

Я думаю, что наиболее вероятно, что я не создал поток l oop правильно.

во всех этих вопросах я хотел знать, почему сокет не подключается и выдает эту ошибку?

Если вы не удовлетворены этим вопросом, пожалуйста, сообщите мне, прежде чем оказать влияние.

1 Ответ

2 голосов
/ 15 января 2020

Используйте start(), а не run(), чтобы фактически начать новую тему.

...