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 を使用して作成したいと考えています。上記のコードは onAsyncTask.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 に答える