我的程序使用套接字时遇到问题。我创建了两个线程Receive和Send,两个在android中使用AsyncTask,两个在计算机中使用Thread。我的问题是在android中停止接收线程,发送线程工作正常并发送消息,但当我取消注释接收,发送不起作用,直到我停止服务器。 代码:
此代码仅接收消息,但不允许我发送
public class Chat extends Activity {
Socket socket;
Button send;
PrintStream ps;
Scanner scanner;
EditText message;
TextView chatField;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_chat);
socket = SocketWrapper.getSocket();
send = (Button) findViewById(R.id.send);
message = (EditText) findViewById(R.id.message);
chatField = (TextView) findViewById(R.id.chatField);
try {
ps = new PrintStream(socket.getOutputStream());
scanner = new Scanner(socket.getInputStream());
} catch (IOException e) {
e.printStackTrace();
}
send.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
new Send().execute();
}
});
new Receive().execute();
}
private class Send extends AsyncTask<String,Void,String>{
@Override
protected String doInBackground(String... params) {
ps.println(message.getText().toString());
publishProgress();
return null;
}
@Override
protected void onProgressUpdate(Void... values) {
chatField.append("You : "+message.getText().toString()+"\n");
message.setText("");
super.onProgressUpdate(values);
}
}
private class Receive extends AsyncTask<String,Void,String>{
String str;
@Override
protected String doInBackground(String... params) {
while(scanner.hasNext()){
str = scanner.nextLine();
publishProgress();
}
return null;
}
@Override
protected void onProgressUpdate(Void... values) {
chatField.append("Server : "+str+"\n");
super.onProgressUpdate(values);
}
}
}
但是当我评论新的Receive()。execute();发送线程工作正常。
没有异常抛出。我很困惑。
答案 0 :(得分:0)
如果您至少在Android v3.0上运行,则一次只能运行一个AsyncTask。 取消注释时,由于接收正在运行,因此无法运行发送。
一种替代方法是使用线程代替(例如,用于接收)。
中的详细信息