Здравствуйте. Возникла проблема использования сокета.
Вот отдельный от проекта файл 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
Ответ
Без логов ошибки сложно сказать, но вот мои предположения:
Нет разрешения в манифесте на интернет
Работа с сетью идёт в основном потоке (т.е. в 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;
}
}
Теперь его надо прописать в манифесте:
Комментариев нет:
Отправить комментарий