【问题标题】:how to wait until data from server is loaded如何等到从服务器加载数据
【发布时间】:2020-12-05 19:16:47
【问题描述】:

我编写了一个简单的应用程序,但遇到了一个问题。

我有 mysql 服务器,想从中获取数据并将其显示在手机屏幕上。

我的 android 应用程序上有一个按钮,当我按下它时 -> 它应该下载数据并将其显示在屏幕上,但我的应用程序想要立即显示这些数据并从服务器加载它需要一段时间,所以我的应用程序崩溃(因为数据还没有准备好)。

我会很乐意提供任何解决方案!

问候 迈克

【问题讨论】:

  • 你能分享你的代码和崩溃日志吗?
  • 它很可能在 UI 线程上运行,无法容忍长时间的延迟或发生 ANR 异常 - 对此有直接的解决方案 - 只需发布您正在使用的按钮回调代码即可提供建议。跨度>

标签: java android mysql


【解决方案1】:

崩溃是因为你的 UI 线程被阻塞超过 10 秒。

改用 AsyncTask 调用。 供参考:https://developer.android.com/reference/android/os/AsyncTask

【讨论】:

    【解决方案2】:

    当你想检索数据并显示它时,我建议你看看LiveData。有了这个,您可以添加一个观察者,它将通知您的应用程序数据已下载并可以显示。在数据加载之前,观察者内部的代码不会被执行。

    // Create a LiveData object
    val data = MutableLiveData<List<String>>()
    
    // Here you should use your code to retrieve from where you want it and add it to the variable 'data'
    data.value = X
    
    // Observe your data
    data.observe(viewLifeCycleOwner) { retrievedData : List<String> -> 
    // The code you add in the observer here will be executed when your data is loaded. The variable 'retrievedData' will contain that data.
    }
    

    【讨论】:

      【解决方案3】:

      如果你的应用因为数据太大而崩溃,最好的办法是读取页面中的数据。

      您可以为您的应用程序提供第一页,并为用户提供对服务器上所有可用数据进行分页的选项。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-01-17
        • 1970-01-01
        • 2016-12-10
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多