我是 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”字符串传递给活动,以便可以使用其内容更新消息文本视图。
干杯