2017-02-08 2 views
0

Я создал класс runnable (Thread), который подключается к серверу, отправляет и принимает сообщения.Контрольный сокет InputStream и OutputStream из Fragment (Android)

public class ConnectAndReceiveData implements Runnable{ 
    private BufferedReader inputBuffer; 
    private String incomeText; 
    private DataOutputStream outputStream; 

    @Override 
    public void run(){ 
     try { 

      InetAddress serverAddr = InetAddress.getByName(SERVER_IP); 
      socket = new Socket(serverAddr, SERVERPORT); 
      if(socket.isConnected()){ 
       outputStream = new DataOutputStream(socket.getOutputStream()); 
       outputStream.writeBytes("Hello"); 
      } 

      inputBuffer = new BufferedReader(new InputStreamReader(socket.getInputStream())); 

      while (!Thread.currentThread().isInterrupted()) { 
       if (inputBuffer.ready()) { 
        incomeText = inputBuffer.readLine(); 
        System.out.println(incomeText); 

       } 
      } 

     } catch (UnknownHostException e){ 
      e.printStackTrace(); 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } 
    } 
} 

Но все предыдущие коды находятся внутри основного вида деятельности.

Есть ли возможность получить входной поток или выходной поток или весь сокет в фрагменте?

Я попытался добавить сокет внутри передаваемого объекта, а затем передать его фрагменту, но я не был успешным.

Надеюсь, вы можете мне помочь !!!

+0

Избавиться от 'готовности()' испытания. Это не спасет вас от блокировки в 'readLine()', и в любом случае spin-looping - плохая идея. – EJP

ответ

1

Создан метод getSocket в основной деятельности

public void Socket getSocket(){ 
     return socket 
} 

Чтобы получить фрагмент формы гнезда я просто написать последующий внутри метода onCreateView

Socket socket = ((MainActivity)getActivity()).getSocket(); 
Смежные вопросы