2

我正在开发一个 Android 应用程序。

我想测试异步套接字在 Android 上是如何工作的,做一个简单的回显客户端。

Java 教程中,我发现了以下代码:

import java.io.*;
import java.net.*;

    public class EchoClient {
        public static void main(String[] args) throws IOException {

            Socket echoSocket = null;
            PrintWriter out = null;
            BufferedReader in = null;

            try {
                echoSocket = new Socket("taranis", 7);
                out = new PrintWriter(echoSocket.getOutputStream(), true);
                in = new BufferedReader(new InputStreamReader(
                                            echoSocket.getInputStream()));
            } catch (UnknownHostException e) {
                System.err.println("Don't know about host: taranis.");
                System.exit(1);
            } catch (IOException e) {
                System.err.println("Couldn't get I/O for "
                                   + "the connection to: taranis.");
                System.exit(1);
            }

        BufferedReader stdIn = new BufferedReader(
                                       new InputStreamReader(System.in));
        String userInput;

        while ((userInput = stdIn.readLine()) != null) {
            out.println(userInput);
            System.out.println("echo: " + in.readLine());
        }

        out.close();
        in.close();
        stdIn.close();
        echoSocket.close();
        }
    }

而不是阅读表单System.in,我想让用户填写一个 EditText,当用户点击一个按钮时,我想发送用户在该 EditText 上介绍的文本。

而且,我想使用 AsyncTask 来实现它。上面的代码将在AsyncTask.doBackground()方法上。

我想做以下事情:用户介绍文本,然后点击发送按钮,然后等待查看响应。当我从 Echo Server 收到响应时,我让用户介绍一个新文本,然后重新开始该过程。还有另一个按钮可以关闭套接字并结束程序。

我的问题是:如何通知有可发送的文本?换句话说,当用户点击发送按钮时,我必须怎么做才能将该文本传递给 AsyncTask?

4

2 回答 2

1

看起来您正在构建一个聊天应用程序。

  • 要将文本发送到服务器,您可以AsyncTask在用户每次单击“发送”按钮时开始一个新的。但请确保在完成操作后停止这些任务。

  • 要接收回复,您可以启动Service并定期检查您的服务器。每当您收到要显示的新消息时,您都可以向主要活动发送广播。而且,在活动内部,您需要创建一个BroadcastReceiver对象来监听来自Service.

因此,当您BroadcastReceiver收到来自 的新广播时Service,请使用您的消息/文本更新消息列表。

于 2012-06-09T20:28:45.323 回答
0

AsyncTask本质上,您可以执行以下操作:

  • 使用一些参数启动任务
  • 以简单的方式为您处理后台线程(您不必担心)
  • 让您以系统的方式将结果发布到 UI 线程。

在您的情况下,听起来您没有向任务发送数据而是使用指定的参数启动任务。

如果您查看AsyncTask 文档中给出的示例,您将看到模板定义的第一个参数是启动任务的参数集。在您的情况下,您可能想要使用URL(或可能只是字符串)参数。当用户单击按钮时,您启动任务,下载内容,然后将结果发布到 UI 线程!

于 2012-06-09T19:25:35.313 回答