【问题标题】:Where is better to parse json string in AsyncTask Class? [closed]在 AsyncTask 类中解析 json 字符串在哪里更好? [关闭]
【发布时间】:2016-04-08 17:25:40
【问题描述】:

我从 url 得到一个 json string 。这个 json 是大量数据,我必须 parse 它们并显示在 ListView 中。

现在你认为我应该

1 Parse它们在 doInBackground() 方法中并返回值

或

2 从 doInBackground() 返回 Json 字符串,而在 onPostExecute() 中解析没有任何更改?

我在 doInBackground() 中做到了:在此方法中解析 Json 字符串并从 Json 字符串和返回值中获取字符串值。这工作正常但是当我parse OnPostExecute() 中的这个 Json 字符串时,我什么也得不到

【问题讨论】:

  • 我认为最好在 doInBackground() 中做...为了更好的性能使用 Gson 来解析 json
  • 只是想补充一点,如果您需要在 UI 中反映网络操作的任何结果,AsyncTask 是一个糟糕的解决方案,因为它与您的 Activity 生命周期没有任何有意义的联系。
  • @Alex Berdnikov,为什么你说 AsyncTask 不适合这项工作?
  • @Sabeer Mohammed 谢谢,请告诉我有关 Gson 的信息以及为什么有更好的性能?请分享 Gson 的教程链接。

标签: android json parsing android-asynctask


【解决方案1】:

您必须在doInBackground() 中Parse 和JSON,否则您将面临NetworkOnMainThreadException。通常AsyncTask 的行为是

  1. onPreExecute() 您显示一些内容让用户了解正在发生/正在后台加载的内容。
  2. doInBackground() 执行您的网络调用并获取/发送数据
  3. onPostExecute() 您在应用的小部件中显示数据。

希望对你有帮助!!!

【讨论】:

  • 我想到了你的第 2 句。正如你所说,我使用doInBackground() 获取网络数据,但我的问题是关于在这种方法中解析 json 吗?为什么doInBackground解析json字符串比OnPostExecute好
  • 因为AsyncTask就是这样设计的
  • 感谢重播,您的回答清晰实用
  • 欢迎您。很高兴能够提供帮助
【解决方案2】:

在我看来,所有不需要在 UI-Thread 中运行的东西都不应该在 UI-Thread 中运行。 所以我建议在doInBackground() 方法中进行解析。

如果您要解析的 Json 是从 REST-API 接收的,请考虑使用 Retrofit library。这将删除大量样板代码:)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-01-04
    • 2014-01-06
    • 2014-07-13
    • 2021-05-24
    • 1970-01-01
    • 2012-04-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多