Java 向服务器发送字符串并接收未更新的响应
我正在用Java为android编写一个应用程序,服务器端也使用Java。 连接是通过插座进行的。要将字符串发送到服务器,我使用asyncTask,如下所示:Java 向服务器发送字符串并接收未更新的响应,java,android,android-asynctask,Java,Android,Android Asynctask,我正在用Java为android编写一个应用程序,服务器端也使用Java。 连接是通过插座进行的。要将字符串发送到服务器,我使用asyncTask,如下所示: public static void send(String content) throws IOException { mConnectionHandler.new AsyncSendToServer().execute(content); } private class AsyncSendToServer extends A
public static void send(String content) throws IOException {
mConnectionHandler.new AsyncSendToServer().execute(content);
}
private class AsyncSendToServer extends AsyncTask<String, Void, Void> {
@Override
protected Void doInBackground(String... params) {
out.println(params[0]);
return null;
}
}
public static String receive() {
mConnectionHandler.new AsyncReceiveFromServer().execute();
return serverResponse;
}
private class AsyncReceiveFromServer extends AsyncTask<Void, Void, String> {
@Override
protected String doInBackground(Void... params) {
String result = null;
try {
result = in.readLine();
} catch (IOException e) {
e.printStackTrace();
}
return result;
}
protected void onPostExecute(String result) {
serverResponse = result;
}
}
publicstaticvoidsend(字符串内容)抛出IOException{
McConnectionHandler.new AsyncSendToServer().execute(内容);
}
私有类AsyncSendToServer扩展了AsyncTask{
@凌驾
受保护的Void doInBackground(字符串…参数){
out.println(参数[0]);
返回null;
}
}
现在,服务器的响应如下所示:
public static void send(String content) throws IOException {
mConnectionHandler.new AsyncSendToServer().execute(content);
}
private class AsyncSendToServer extends AsyncTask<String, Void, Void> {
@Override
protected Void doInBackground(String... params) {
out.println(params[0]);
return null;
}
}
public static String receive() {
mConnectionHandler.new AsyncReceiveFromServer().execute();
return serverResponse;
}
private class AsyncReceiveFromServer extends AsyncTask<Void, Void, String> {
@Override
protected String doInBackground(Void... params) {
String result = null;
try {
result = in.readLine();
} catch (IOException e) {
e.printStackTrace();
}
return result;
}
protected void onPostExecute(String result) {
serverResponse = result;
}
}
公共静态字符串接收(){
mConnectionHandler.new AsyncReceiveFromServer().execute();
返回服务器响应;
}
私有类AsyncReceiveFromServer扩展了AsyncTask{
@凌驾
受保护字符串doInBackground(无效…参数){
字符串结果=null;
试一试{
结果=in.readLine();
}捕获(IOE异常){
e、 printStackTrace();
}
返回结果;
}
受保护的void onPostExecute(字符串结果){
serverResponse=结果;
}
}
由于这些方法是异步的,serverResponse在receive()中没有获得适当的值。当我执行AsyncReceiveFromServer时,receive()返回serverResponse的值,然后在asyncTask中更新它。要发送更新的serverResponse,我可以做什么?从AsyncSendToServer的onPostExecute执行AsyncReceiveFromServer。
这样,您完全可以确定发送已经完成。它仍然不起作用。serverResponse在他从Send获取新值之前返回,因为它是同时执行的。那么你没有按照我说的做,或者其他事情出错了。。。如果在发送完成之前(如果在发送的onPostExecute()内启动接收,则必须完成发送),才开始获取serverresponse,则无法同时执行。好的,我已设法修复了它。在receive()上,我只是返回AsyncReceiveFromServer结果,等待它完成计算。非常感谢!