【问题标题】:Loading data from SQLite从 SQLite 加载数据
【发布时间】:2014-02-10 00:19:34
【问题描述】:

我有一个聊天应用程序,它将消息保存在Sqlite 数据库中。我需要在用户单击时加载每个聊天的所有消息,并在活动中以ListView 显示它们。所以我想知道如何做到这一点? 我想了几种方法来做到这一点

第一个选项:在以数组形式为用户打开消息屏幕之前从数据库中获取数据(消息,即字符串),并在启动消息活动时将它们传递给意图,然后显示消息onCreate() 方法。

第二个选项: 在创建活动时从数据库中获取数据(消息,即字符串)并显示它们。

第三种选择:根据Sqlite保存持久状态

任何其他想法表示赞赏。 谢谢。

【问题讨论】:

  • 尝试在后台线程中使用进度条来显示数据

标签: java android database sqlite android-listview


【解决方案1】:

使用第二个选项。只需将唯一的聊天 ID 发送到 chat screen 并以 oncreate() 方法从数据库中加载该聊天的所有消息,然后将所有消息绑定到 listview.

【讨论】:

  • 我会试一试的。但是如果在onCreate() 加载消息需要时间怎么办?也许@mohammed momn 建议的进度条在这里会有所帮助。
  • 不是进度条显示对话框,而是显示一些消息和从数据库中获取消息不会花费太多时间,它会以毫秒为单位。
  • 好的,谢谢。我现在就试一试。
  • 以完美的方式加载,无需线程。但我会在数据较大时查看是否需要线程。
  • 当记录数以百万计时,您将需要线程。但是由于您想显示聊天消息,因此您可以从数据库中获取最后 50 或 100 条消息,当用户到达顶部时,再次获取其他记录并显示给用户。
【解决方案2】:

在Activity中,在其他线程中加载sqlite db,加载完成后,打印到你的列表视图中。

new Thread(new Runnable() {

    @Override
    public void run() {
        // TODO Auto-generated method stub

        //loading database
        mHandler.sendMessage(msg);
    }
}).start();

Handler mHandler = new Handler() {
    public void handleMessage(Message msg) {
        //update listview
    };
};

【讨论】:

  • 听起来是在threadonCreate() 中加载它们的最合理方式。我会试一试并得到结果。谢谢。
【解决方案3】:

我要做的是在您打开 Activity 时加载它们,但我不会加载所有消息,只会加载最后 X 项。大多数用户在 99% 的情况下都不会向上滚动到旧消息。

例如,您可以加载最后 10 条消息,然后(如果用户向上滚动)加载其他消息。

好运!!

【讨论】:

  • 听起来合乎逻辑,特别是它不需要时间来选择最后 X 条消息、准备它们并设置 listview
猜你喜欢
  • 1970-01-01
  • 2019-07-19
  • 2016-08-24
  • 2018-06-21
  • 1970-01-01
  • 2013-09-09
  • 2019-10-15
  • 2017-10-09
  • 2018-11-12
相关资源
最近更新 更多