私は Android 開発と Java に不慣れで、誰かが次のことを手伝ってくれるかどうか疑問に思っていました:
指定されたポートでリッスンするサーバー スレッドを実行するアプリケーションを作成しました。接続されたクライアントから受信したメッセージをアクティビティの TextView に出力したいと思います。
サーバー スレッドは別のクラスにあります。このクラスの run メソッドは、クライアント接続をリッスンし、受信したデータを String に読み取ります。
TextView を更新できるように、この文字列の内容をアクティビティに転送する最良の方法は何でしょうか?
私の(限られた)理解から、UIスレッドのみがTextViewを更新する必要があり、runOnUiThreadを取得してTextViewを更新する方法が見つかりません。
リクエストに応じてコードを追加しました。
活動コード:
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
TextView messages = (TextView) findViewById(R.id.messages);
try {
newThread server = new newThread(this, messages);
} catch(Exception e) {
Toast.makeText(ChatActivity.this, e.toString(), Toast.LENGTH_LONG).show();
}
}
newThread クラスでメソッドを実行します。
public void run()
{
serv = new ServerSocket(8000);
while(true)
{
cli = serv.accept();
user = cli.getInetAddress().toString();
BufferedReader cli_in = new BufferedReader(new InputStreamReader(cli.getInputStream()));
OutputStreamWriter cli_out = new OutputStreamWriter(cli.getOutputStream());
while((buf = cli_in.readLine()) != null)
{
// Update the messages TextView with buf
}
}
}
雑然としすぎないように、関係のないコードは可能な限り省略しました。
基本的に、run() の内側の while ループでは、「buf」文字列をアクティビティに渡して、メッセージのテキストビューをそのコンテンツで更新できるようにしたいと考えています。
乾杯