我是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();
}
}
}
}