Страницы

Поиск по вопросам

пятница, 10 января 2020 г.

Создание Android приложений. Sockets

#android #java #сокет


Здравствуйте. Возникла проблема использования сокета.
Вот отдельный от проекта файл Client.java, который служит для проверки соединения
в консольном режиме:

import java.net.Socket;
import java.net.UnknownHostException;
import java.io.*;


public class Client {
    static AffableThread mSecondThread;
 public static void main(String[] args)  {
     mSecondThread = new AffableThread();
     mSecondThread.start();
}
}
class AffableThread extends Thread
{
    @Override
    public void run()
    {
        System.out.println("Абракадабра");
        try{
            Socket socket = new Socket("127.0.0.1", 5555);
            }catch(UnknownHostException e){}catch(IOException e){}
        System.out.println("Подключайся любезнейший!");
    }
}


Работает на ура, подключается к серверу без проблем.
Но стоит мне распихать элементы этого кода по моему основному коду, то выдает ошибкy:

> FATAL EXCEPTION: main
> java.lang.NullPointerException

    


Ответы

Ответ 1



Без логов ошибки сложно сказать, но вот мои предположения: Нет разрешения в манифесте на интернет Работа с сетью идёт в основном потоке (т.е. в onCreate() активити или фрагмента). Так с определённой версии андроида низзя. Надо делать в отдельном потоке. Например в Service или AsynkTask. Если всё же использовать Service, то надо про него почитать доки. И делать как-то так: Создаём класс, расширяющий класс android.app.Service: public class MyService extends Service { @Override public void onCreate() { } @Override public int onStartCommand(Intent intent, int flags, int startId) { //вот тут можно работать с сетью без проблем. return super.onStartCommand(intent, flags, startId); } @Override public void onDestroy() { } @Override public IBinder onBind(Intent intent) { return null; } } Теперь его надо прописать в манифесте: И наконец, теперь можно вызвать всё это из активити: Intent intent = new Intent(this, MyService.class); this.startService(intent);

Комментариев нет:

Отправить комментарий