Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/315.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/232.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类中的onPostExecute发送值_Java_Android_Android Asynctask_Websocket - Fatal编程技术网

Java 从侦听器接口向AsyncTask类中的onPostExecute发送值

Java 从侦听器接口向AsyncTask类中的onPostExecute发送值,java,android,android-asynctask,websocket,Java,Android,Android Asynctask,Websocket,事实上,我正在尝试在Android上使用构建一个WebSocket客户端应用程序。 但我的doInBackground功能一直在使用 我正在尝试对WebSocket连接使用AsyncTask,但是当我必须传递到onPostExecute时,我被卡住了从onTextMessage执行消息:/ private class Reseau extends AsyncTask<Void, Void, String> { // This is run in a background th

事实上,我正在尝试在Android上使用构建一个WebSocket客户端应用程序。 但我的doInBackground功能一直在使用

我正在尝试对WebSocket连接使用AsyncTask,但是当我必须传递到onPostExecute时,我被卡住了从onTextMessage执行消息:/

private class Reseau extends AsyncTask<Void, Void, String> {
    // This is run in a background thread
    @Override
    protected String doInBackground(Void... params) {

        socket.addListener(new WebSocketAdapter() {
            @Override
            public void onTextMessage(WebSocket websocket, String message) throws Exception {
                // Here I want to return the String message to onPostExecute
                // How to do it ? return message do not work because onTextMessage is void
            }
        });

        try { socket = new WebSocketFactory()
                .setConnectionTimeout(5000)
                .createSocket(adresse[0] + adresse[1])
                .connect();
        }
        catch (IOException e) { e.printStackTrace(); } catch (WebSocketException e) { e.printStackTrace(); }

        return "I want to pass message from onTextMessage to onPostExecute";
    }

    // This runs in UI when background thread finishes
    @Override
    protected void onPostExecute(String result) {
        super.onPostExecute(result);
        zone.append(result);
    }
}
私有类重置扩展异步任务{
//这是在后台线程中运行的
@凌驾
受保护字符串doInBackground(无效…参数){
addListener(新的WebSocketAdapter(){
@凌驾
public void onTextMessage(WebSocket WebSocket,String message)引发异常{
//在这里,我想将字符串消息返回到onPostExecute
//怎么做?返回消息不起作用,因为onTextMessage无效
}
});
试试{socket=newWebSocketFactory()
.setConnectionTimeout(5000)
.createSocket(地址[0]+地址[1])
.connect();
}
catch(IOException e){e.printStackTrace();}catch(WebSocketException e){e.printStackTrace();}
返回“我想将消息从ContextMessage传递到onPostExecute”;
}
//当后台线程完成时,它在UI中运行
@凌驾
受保护的void onPostExecute(字符串结果){
super.onPostExecute(结果);
区域。追加(结果);
}
}
我可以使用RunNuithRead或enable StrictMode,但这不是做这项工作的好方法


谢谢你的帮助

与其尝试将其发送到onPostExecute()方法,不如在AsyncTask类中定义另一个自定义方法来执行您想要执行的操作应该在与doInBackground相关的线程中执行,并且字符串消息必须传递到onPostExecute中的UI线程。那么,在另一种方法中移动“socket.addListener”如何解决我的问题呢?您是打算只获取一条消息还是继续获取消息?在应用程序启动之前获取每条消息?我很困惑,如果您的活动没有运行,那么为什么要使用AsyncTask来获取数据呢?你为什么不改用一个简单的服务呢?如果您的主要目的是接收数据,那么创建一个服务并在那里启动侦听器。而且,由于服务从主UI运行,因此您不需要异步任务