#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);
Комментариев нет:
Отправить комментарий