Изменить активность с потоками на фрагмент, чат Android TCP - PullRequest
0 голосов
/ 08 марта 2020

Я новичок в android и мне нужна помощь, пожалуйста. Я создал TCP-чат с потоками для Android, теперь я хочу поместить все в действие, содержащее 2 фрагмента, в первом я хочу, чтобы список подключенных пользователей отображался в представлении списка, во втором фрагменте, который я хочу реализовать код, который у меня есть Для чата, когда я создаю оба фрагмента и добавляю представление списка, он работает, но когда вы вводите код чата во втором фрагменте, он не работает.

Мне нужна помощь пожалуйста, спасибо заранее

Main Activity with 2 fragments green and blue

MainActivity. java

    public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }
}

Фрагмент Синий (фрагмент чата с темами)

public class FragmentChat extends Fragment {

    private Button btEnvia;
    private TextView tvChat;
    private EditText etEscribe;

    //Variables al recibir de la primera actividad
    private String nickRecojo;
    private String IpRecojo;
    private String puertoRecojoStr; //el puerto se introduce como String para mandarlo
    private int puertoInteger; //convertimos el string de puerto a int
    String msgEnviar;

    Socket cliente;
    String mensaje = "";
    DataOutputStream dos;
    Thread hilo=null;

    String cadena;
    String nickName = "androidTest";
    int puerto = 61000;
    String host = "192.168.56.1";

    //arrayList para guardar clientes
    ArrayList<String> clientes = new ArrayList<String>();

    public FragmentChat() {
            // Required empty public constructor

        }

        @Override
        public View onCreateView(LayoutInflater inflater, ViewGroup container,
                                 Bundle savedInstanceState) {
            // Inflate the layout for this fragment
            tvChat = (TextView)getView().findViewById(R.id.textView);
            btEnvia = (Button)getView().findViewById(R.id.button);
            etEscribe = (EditText)getView().findViewById(R.id.editText2);


            Thread hilo = new Thread(new HiloSocket());
            hilo.start();


            // ------------------ Enviar Chat
            btEnvia.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    try {
                        enviarMensaje();
                        //tvChat.setText(cadena);
                    } catch (Exception e) {
                        e.printStackTrace();
                    }
                }
            });
            return inflater.inflate(R.layout.fragmentos_chat, container, false);
        }

    private class HiloSocket extends Thread {
        public HiloSocket(){}

        public void run(){
            try {
                StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder()
                        .permitAll().build();
                StrictMode.setThreadPolicy(policy);

                    cliente = new Socket(host, puerto);
                    dos = new DataOutputStream(cliente.getOutputStream());
                    dos.writeUTF(nickName);   //Send nick to server in java(eclipse)
                    String nickControl="###"+nickName+"###";
                    dos.writeUTF(nickControl);

                //------------- Recibir chat----------------
                recibirChat();

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

    private void enviarMensaje()throws IOException{
        msgEnviar = etEscribe.getText().toString();
        dos.writeUTF(msgEnviar);
        mensaje = mensaje + "\n"+ "Yo: " + msgEnviar;
        tvChat.setText(mensaje);
        etEscribe.setText("");
    }

    //METODO PARA RECIBIR EL CHAT
    private void recibirChat() {
        new Thread(new Runnable() {
            public void run() {
                while (true) {
                    try {
                        DataInputStream disChat = new DataInputStream(cliente.getInputStream());
                        String mensajeRecibido = disChat.readUTF();
                            mensaje = mensaje + "\n" + mensajeRecibido;
                            getActivity().runOnUiThread(new Runnable() {
                                public void run() {
                                    tvChat.setText(mensaje);
                                }
                            });

                        //
                    } catch (IOException e) {
                        System.out.println("Error al recibir mensaje: " + e.getMessage());
                    }
                }

            }

        }).start();


    }
}

Фрагмент Зеленый (Пользователи) на данный момент ничего не делают

    public class FragmentUsuarios extends Fragment {


    public FragmentUsuarios() {
        // Required empty public constructor
    }

    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {

        View vista = inflater.inflate(R.layout.fragmento_usuarios, container, false);
        // Inflate the layout for this fragment
        ArrayList<String> alclientes =new ArrayList<String>();
        alclientes.add("usuario1");
        alclientes.add("usuario2");
        alclientes.add("usuario3");

        //String [] menuItems = {"Cliente 1", "Cliente 2", "Cliente 3"};

        ListView listas = (ListView)vista.findViewById(R.id.lista);

        ArrayAdapter<String> adaptador = new ArrayAdapter<String>(getActivity(),android.R.layout.simple_list_item_1, alclientes);
        listas.setAdapter(adaptador);


        listas.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
                if (position == 0) {
                    Toast.makeText(getActivity(), "Has pulsado el primer elemento", Toast.LENGTH_SHORT).show();
                }
                if (position == 1) {
                    Toast.makeText(getActivity(), "Has pulsado el segundo elemento", Toast.LENGTH_SHORT).show();
                }
                if (position == 2) {
                    Toast.makeText(getActivity(), "Has pulsado el tercer elemento", Toast.LENGTH_SHORT).show();
                }
            }
        });
        return vista;
    }
}

Я загрузил фрагменты. java, xml необходим? Большое спасибо

...