【问题标题】:Network on Main Thread without AsyncTask没有 AsyncTask 的主线程上的网络
【发布时间】:2015-07-31 15:58:41
【问题描述】:

在我的 Android 应用程序中,有时我需要等待连接到网络的 AsyncTask 结束,才能获得结果,然后再继续,具体取决于结果的值! 这就是我们所说的同步任务之前没有A的同步。但是我该怎么做:我的意思是如果我不在 AsyncTask 中执行它,它会返回一个 android.os.NetworkOnMainThreadException (而这是我想要做的),并且 AsyncTask 不能返回结果!!!

每个人都有答案吗?

非常感谢!

【问题讨论】:

  • onPostExecute(Result) 正是为此而生的。

标签: android android-asynctask return-value


【解决方案1】:

我的意思是,如果我不在 AsyncTask 中执行此操作,它会返回一个 android.os.NetworkOnMainThreadException

没有。如果您不在后台线程中执行此操作(其中 AsyncTask 是执行此操作的一种方式),它将返回异常。

Painless Threading

而且 AsyncTask 不能返回结果!!!

不正确。 AsyncTask 可以通过onPostExecute() 返回结果。 The Documentation

很好地解释了这一点

我有时需要等待连接到网络的 AsyncTask 结束,才能得到结果,然后根据结果的值继续执行!

好的,如果没有要完成的 UI 工作,请在获取结果时显示 ProgressDialog。然后根据结果使用onPostExecute()处理下一个任务。

This answer 解释了如何在任务完成后获得结果。

另外,How to get result of onPostExecute()

【讨论】:

    【解决方案2】:

    每个人都有答案吗?

    是的。不要在主线程上进行联网。期间。

    使用异步任务和onPostExecute() 的异步任务正是为了在doInBackground() 完成之后 完成工作。 onPostExecute() 也在 UI 线程上运行。这都是is nicely documented

    【讨论】:

      猜你喜欢
      • 2015-10-04
      • 1970-01-01
      • 1970-01-01
      • 2013-06-26
      • 1970-01-01
      • 1970-01-01
      • 2013-08-29
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多