当我按下按钮时,缓冲区读取器会阻塞我的程序

时间:2019-06-04 19:05:01

标签: java android python-3.x sockets client

我是stackoverflow的新手,这里有一个问题,我在Java中有一个android应用程序的客户端,但是当我从服务器向客户端发送消息并输入async时,线程停止了,我不知道该如何重复按钮才能得到in.readLine()

这是MainActivity.java

in.readLine()

这是python服务器:

import android.content.DialogInterface;
import android.media.MediaPlayer;
import android.os.AsyncTask;
import android.os.Handler;
import android.os.Looper;
import android.support.v7.app.AlertDialog;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.MultiAutoCompleteTextView;
import android.widget.TextView;
import android.widget.Toast;
import android.os.AsyncTask;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.net.*;

import java.net.Socket;
import java.util.Scanner;

public class MainActivity extends AppCompatActivity
{
    /* Variabili */
    public String nome, cognome, messaggio;
    //public Toast t1; //Messaggino di errore o successo


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

        final MultiAutoCompleteTextView editN = findViewById(R.id.editNome);
        final MultiAutoCompleteTextView editC = findViewById(R.id.editCognome);
        final TextView arrivato = findViewById(R.id.messerver);
        /* Prendo il nome e il cognome :) */

        /*Vabbe qui lo puoi capire da solo, creo il suono hahah*/
        final MediaPlayer fatto = MediaPlayer.create(this, R.raw.sao_menu); //R.raw.sao_menu serve per cercare il file nella cartella res, raw, sao menu
        Button btnPrenota = findViewById(R.id.btnPrenota); //collegamentro al button dell'xml
        /* Bottone e relativo listener */
        btnPrenota.setOnClickListener(new View.OnClickListener()
        {
            @Override
            public void onClick(View v)
            {
                Toast mioToast;
                nome = editN.getText().toString();
                cognome = editC.getText().toString();
                messaggio = nome + " " + cognome;
                //System.out.println("Il messaggio è: " + messaggio);
                send sendcode = new send(messaggio, arrivato);
                sendcode.start();

            } //prova a farlo come thread invece di doInBackground Tu come lhai fatto ? con il Thread aspe proviamo cosi
        });
    }



    class send extends Thread//AsyncTask<Void, Void, Void>
    {
        String messaggio;
        Socket s;
        TextView arrivato;
        ;

        public send (String messaggio, TextView arrivato)
        {
            this.arrivato = arrivato;
            this.messaggio = messaggio;
        }


        public void run()
        {
            try
            {
                s = new Socket("192.168.1.8", 8888);
                if (s.isConnected())
                {
                    PrintWriter pw = new PrintWriter(new OutputStreamWriter(s.getOutputStream()));
                    pw.print(this.messaggio);
                    pw.flush();
                    //pw.close();
                    //byte[] bytes = new byte[1024];
                    InputStream input = s.getInputStream();
                    BufferedReader in = new BufferedReader(new InputStreamReader(input));
                    String line = "";

                    System.out.println("im in");
                    System.out.println("Line == " + line);
                    line = in.readLine();


                    System.out.println(line);


                    System.out.println("i've done");



                    /*System.out.println("Sto inizializzando il messagggio");
                    messaggio = in.readLine();
                    Handler h = new Handler(Looper.myLooper());
                    h.post(new Runnable() {
                        @Override
                        public void run() {
                            arrivato.setText(messaggio);
                        }
                    });*/

                    //System.out.println("sono uscito")
                    in.close();
                    pw.close();
                    s.close();
                }
            }
            catch (UnknownHostException e)
            {
                e.printStackTrace();
            }
            catch (IOException e)
            {
                e.printStackTrace();
            }


        }
    }

}

0 个答案:

没有答案