【问题标题】:Android-Studio: How to update a chat (ListView) from a thread, which is startet in an other ActivityAndroid-Studio:如何从线程更新聊天(ListView),该线程在其他活动中启动
【发布时间】:2018-04-05 14:42:08
【问题描述】:

大家好:)我目前正在开发一个安卓项目,我想在其中实现聊天功能。我知道有几个教程描述了一个聊天应用程序,但我想用我自己的服务器自己做。 在我的 MainActivity 中,我在一个新线程中启动了一个自己编写的更新程序(网络操作只能在 UI 线程之外完成),它永久检查是否存储在我的服务器(RaspberryPi)上的聊天协议,有来自其他用户的新消息。如果有新消息,更新程序会下载它并将其存储在一个字符串中。这很好用! 现在,当更新程序收到一条新消息时,我想用新消息更新我的 Chat-Activity 中的 ListView。此过程应随时工作并永久更新我的 ListView(而不是使用刷新按钮或类似的东西)。 我的问题是:我如何以最顺畅的方式实现这一点 - 一种策略,不一定是代码。一个可行但感觉有点随机的想法是将接收到的消息写入共享首选项文件中,并通过聊天活动中的无限循环将其加载到聊天活动中。 是否有可能随时使用 MainActivity 中 startet 的更新程序直接在 ListView 中写入接收到的消息。 如果需要,我可以上传当前代码,但我想直接而不是无限循环。 感谢您的阅读,甚至可能是您的帮助:)

【问题讨论】:

  • 如果你不展示一些代码,我们很难理解,甚至我们可以自己尝试一下
  • 我明白了,目前我正在尝试对数据绑定类进行一些思考,如果这不起作用,我会整理我的代码并发布它

标签: java android listview android-studio


【解决方案1】:

您可能希望将收到的消息保存在 SQLite 数据库中,并且在 Activity 内部,您可以轮询数据库(假设每 5 秒一次)并在 Activity 销毁后停止轮询。

另一种方法是使用视图的静态引用并从不同的类更新它们。即使您尝试从后台线程中更新它们,您也可以使用 view.post() 更新 UI

SomeActivity.textView.post(new Runnable(){
    @Override
    public void run(){
       SomeActivity.textView.setText("sth");
    }
});

【讨论】:

  • 嘿,谢谢你的评论,会试试这个或者至少记住它,目前我正在尝试使用数据绑定类
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-12-16
  • 1970-01-01
相关资源
最近更新 更多