Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/347.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 在多个活动中使用AsyncTask_Java_Android_Android Asynctask - Fatal编程技术网

Java 在多个活动中使用AsyncTask

Java 在多个活动中使用AsyncTask,java,android,android-asynctask,Java,Android,Android Asynctask,我在正确使用异步任务方面有问题。我使用AsyncTask与服务器通信。我在AsyncTask doInBackground中运行服务器连接。我的应用程序在后台监听,一旦捕获的消息使用publishProgress。然后我可以在我的应用程序中使用消息。在我的应用程序中,我正在登录服务器,如果成功,新活动将启动。我还需要在新活动中与服务器通信,但连接是在后台任务中创建的。我不知道如何通过新活动中建立的联系进行沟通。有人能给我建议吗?多谢各位 请看一下代码。我在LoginUser类中有此代码,成功登录

我在正确使用异步任务方面有问题。我使用AsyncTask与服务器通信。我在AsyncTask doInBackground中运行服务器连接。我的应用程序在后台监听,一旦捕获的消息使用publishProgress。然后我可以在我的应用程序中使用消息。在我的应用程序中,我正在登录服务器,如果成功,新活动将启动。我还需要在新活动中与服务器通信,但连接是在后台任务中创建的。我不知道如何通过新活动中建立的联系进行沟通。有人能给我建议吗?多谢各位

请看一下代码。我在LoginUser类中有此代码,成功登录到服务器后,新活动开始

//init
private ConnectionClass mConnectClass; 
private connectTask mTask;

//execute  connectTask
mTask = new connectTask();
mTask.execute("");

    public class connectTask extends AsyncTask<String, String, ConnectionClass> {
    @Override
    protected ConnectionClass doInBackground(String... message) {
        Log.i("Terminal", "doInBackground.");

        mConnectClass = new ConnectionClass(
                new ConnectionClass.OnMessageReceived() {
                    @Override
                    // here the messageReceived method is implemented
                    public void messageReceived(String message) {
                        // this method calls the onProgressUpdate
                        publishProgress(message);
                    }
                });
        Log.i("Terminal", "Starting...");
        mConnectClass.connectServer();
        return null;
    }

    @Override
    protected void onProgressUpdate(String... values) {
        super.onProgressUpdate(values);
        answerFromServer = Arrays.toString(values);
        // serverMessage.append("S: " + Arrays.toString(values) + "\n");
    }
}
//初始化
私有连接类mConnectClass;
私有连接任务mTask;
//执行连接任务
mTask=新连接任务();
mTask.execute(“”);
公共类connectTask扩展了AsyncTask{
@凌驾
受保护连接类doInBackground(字符串…消息){
Log.i(“终端”、“后台”);
mConnectClass=新连接类(
新的ConnectionClass.OnMessageReceived(){
@凌驾
//这里实现了messageReceived方法
已接收公共无效消息(字符串消息){
//此方法调用onProgressUpdate
出版进度(信息);
}
});
Log.i(“终端”,“启动…”);
mConnectClass.connectServer();
返回null;
}
@凌驾
受保护的void onProgressUpdate(字符串…值){
super.onProgressUpdate(值);
answerFromServer=Arrays.toString(值);
//serverMessage.append(“S:+Arrays.toString(values)+“\n”);
}
}

不要为此使用
AsyncTask
。你似乎想让你的连接保持一段较长的时间
AsyncTask
只应用于最后一次执行的任务。您可以考虑使用<代码>服务>代码>。

AN代码> AcyCastase<代码>是用于短时间的一次性后台任务。如果你建立了一个连接并想让它保持活动状态,你需要考虑使用
服务
。谢谢你的帮助!我想再问一个问题。我想让用户登录到服务器,然后在新活动中继续与服务器通信。你是怎么说的,我应该使用服务,然后我可以保持我的连接打开一段时间。但是,我需要在屏幕上显示来自服务器的新消息。我应该使用AsyncTask在ServiceClass中显示新消息吗?有没有更好的方法来实现这一点?可能有多种方法来完成这一点,但我会考虑发送一个。由于这是一个不同于你原来的问题,如果你需要更多的帮助,最好把它变成一个新问题。