android - AsyncTask 返回值

标签 android return-value android-asynctask

我的 android 应用程序连接到我的网站以检索和上传信息,因此我使用 AsyncTask 线程。

在一个实例中,我需要我的线程向我的主线程返回一个真值或假值。

有没有办法从 AsyncTask 执行函数中获取这个返回值?

当我执行以下操作时:

Toast.makeText(Locate.this, "Testing : "+locationUpdate.execute(location), Toast.LENGTH_LONG).show();

我只是得到了很多胡言乱语。

我认为我需要一种暂停主线程直到第二个线程完成的方法。第二个线程调用主线程中的一个函数来设置我的返回值。 所以当第二个线程完成时,主线程可以取消暂停并访问第二个线程设置的返回值 如果这个逻辑是合理的,请提供建议...谢谢!

最佳答案

您可以使用 AsyncTask get()方法。如果需要,它会等待计算完成,然后检索其结果:

Toast.makeText(Locate.this, "Testing : " + locationUpdate.execute(location).get(), Toast.LENGTH_LONG).show();

但请务必不要长时间阻塞主线程,因为这会导致 UI 无响应和 ANR .

更新
我错过了关于异步 web 下载/上传的问题。 Web/网络操作应该被视为一个漫长的操作,因此“暂停 UI 线程并等待下载完成” 的方法总是错误的。使用通常的结果发布方法(例如:AsyncTask.onPostExecute、Service + sendBroadcast、Volley、RoboSpice、DataDroid 等库)。

关于android - AsyncTask 返回值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5457493/

相关文章:

android - Android 中的守护进程

android - 如何在手机间隙使用自定义字体?

java - 异步任务方法 : I get error whether I write "@Override" annotation or not

python - 从函数中获取特定值

java - 为什么我无法在 AsyncTask 中为另一个类的 ListView 设置适配器?

java - Android TCP 客户端。服务器仅在进程停止后接收消息

android - 删除数据库中创建的前 20 行

c++ - 如何将指针作为迭代器返回?

c - C语言中如何返回一个数组?

php - 在后台多次从 android 执行 .php 文件的最佳方法是什么?