Android.os.NetworkOnMainThreadException при попытке подключиться к серверу не соединяется

Рейтинг: 0Ответов: 1Опубликовано: 20.02.2015

Подключение вызывается кнопкой без AsyncTask'a, не подключается, ошибка выводится в консоли. При помещении функции в AsyncTask приложение при нажатии на кнопку вылетает.

public void warn(View view)
{
    ImageView Warning = (ImageView) findViewById(R.id.Warning);
    Log.d(ru.example.nya.Globals.getTAG(),"Global Socket is Opening");
   System.out.println(ru.example.nya.Globals.getSocket().isConnected());
   try{
       System.out.println(port);
       Socket gsocket = new Socket("192.168.0.110", 1001);
       ru.example.nya.Globals.setSocket(gsocket);
       ru.example.nya.Globals.setSending(true);
       gameloop.start();
       Warning.setImageResource(R.drawable.inawarning);
       Warning.setClickable(false);

   }
   catch(UnknownHostException e) {
       Log.e(ru.example.nya.Globals.getTAG(),e.toString());
      }

   catch(Exception e){
       Log.e(ru.example.nya.Globals.getTAG(),e.toString());
   }}     

Класс GameLoop

public class GameLoop extends Thread{
    // Must be volatile:
    private volatile boolean stop = false;
    private volatile int i = 0;

    public void run() {

            while (!stop) {
                    System.out.println("alive");
                            String forward = Globals.getForward();
                            String backward = Globals.getBackward();
                            String left = Globals.getLeft();
                            String right = Globals.getRight();
                            String highbeam = Globals.getHighBeam();
                            String lowbeam = Globals.getLowBeam();

                            String Command = forward+backward+left+right+lowbeam+highbeam;

                            byte[] CommandBytes = EncodingUtils.getAsciiBytes(Command);
                    try {
                    DataOutputStream dataOutputStream = null;

                    try {

                        dataOutputStream = new DataOutputStream(ru.example.nya.Globals.getSocket().getOutputStream());
                        for (i=0; i<5; i++) dataOutputStream.writeBytes(CommandBytes[i]+"\n");

                        Log.i(ru.example.nya.Globals.getTAG(),"Testing");

                    } catch (IOException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                    }   

                    System.out.println(forward+backward+left+right+lowbeam+highbeam+"\n");

                        Thread.sleep(1000);
                    } catch (InterruptedException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                    }
            }
            if (stop){
                    System.out.println("Detected stop");
                    System.out.println(ru.example.nya.Globals.getSocket().isConnected());
                    try {
                        ru.example.nya.Globals.getSocket().shutdownOutput();
                        ru.example.nya.Globals.getSocket().close();
                        System.out.println("Stopping");
                    } catch (Exception e) {
                        // TODO Auto-generated catch block
                        Log.e(ru.example.nya.Globals.getTAG(),e.toString());
                    }

            }
            if (ru.example.nya.Globals.getSocket().isClosed()){
                this.interrupt();
                System.out.println("Stopped");
             }
    }
    public synchronized void requestStop() {
            stop = true;
            System.out.println(stop);
    }}

Как решить эту проблему?

02-21 12:30:06.840: D/CarControler(25822): Loaded 02-21 12:30:06.840: E/SensorManager(25822): sensor or listener is null
02-21 12:30:06.840: E/SensorManager(25822): sensor or listener is null 02-21 12:30:06.960: I/Adreno-EGL(25822): : EGL 1.4 QUALCOMM build: AU_LINUX_ANDROID_KK_3.5_RB1.04.04.02.006.092_msm8226_refs/tags /AU_LINUX_ANDROID_KK_3.5_RB1.04.04.02.006.092__release_AU () 02-21 12:30:06.960: I/Adreno-EGL(25822): OpenGL ES Shader Compiler Version: E031.24.00.06 02-21 12:30:06.960: I/Adreno-EGL(25822): Build Date: 03/04/14 Tue 02-21 12:30:06.960: I/Adreno-EGL(25822): Local Branch: 02-21 12:30:06.960: I/Adreno-EGL(25822): Remote Branch: refs/tags /AU_LINUX_ANDROID_KK_3.5_RB1.04.04.02.006.092 02-21 12:30:06.960: I/Adreno-EGL(25822): Local Patches: NONE 02-21 12:30:06.960: I/Adreno-EGL(25822): Reconstruct Branch: NOTHING 02-21 12:30:07.030: D/OpenGLRenderer(25822): Enabling debug mode 0 02-21 12:30:13.080: D/CarControler(25822): Global Socket is Opening 02-21 12:30:13.080: E/CarControler(25822): android.os.NetworkOnMainThreadException

Ответы

▲ 1

Android.os.NetworkOnMainThreadException означает, что нельзя с API>11 лезть в интернеты из основного потока приложения. Решается выносом работы с сетью в Service или AsyncTask.

Вообще вопрос не очень понятен. То ли вы уже сделали, как выше написано, и получаете уже какую-то другую ошибку, то ли нет... Логи нужны нам.