Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/211.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 向服务器发送字符串并接收未更新的响应_Java_Android_Android Asynctask - Fatal编程技术网

Java 向服务器发送字符串并接收未更新的响应

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

我正在用Java为android编写一个应用程序,服务器端也使用Java。 连接是通过插座进行的。要将字符串发送到服务器,我使用asyncTask,如下所示:

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结果,等待它完成计算。非常感谢!