【问题标题】:Notifiy Activity when AsyncTask is ready?AsyncTask 准备好时通知 Activity?
【发布时间】:2011-04-19 18:51:18
【问题描述】:

我有这个活动,它在 onclick 事件中对 Login 类进行分类。我的 Login 类基本上是做一个 http post 并解析来自服务器的 XML 响应。这发生在 Login 类的构造函数中的线程内。

我的问题出在这部分:

Login login = new TvsLogin(emailEditText.getText().toString(), passwordEditText.getText().toString());
if(login.isErrorOccurd()){

}
else{

}

基本上,当 login 的构造函数发挥作用时,我的其余代码被执行,login.isErrorOccurd() 显示为 false 并且我的 else 块被执行,即使出现错误也是如此。

任何建议我应该如何解决这个问题?登录可能需要一些时间,因此在线程中进行登录是有意义的,但它并没有按我预期的方式运行。

编辑:

就像 Pixie 所说,我必须使用 AsyncTask。不过,我仍然想在我的活动中进行报告。我该怎么做呢? (这是个好主意,还是我应该在我的 Activity 中的 onPostExecute() 方法中执行此操作?)

【问题讨论】:

    标签: java android android-activity android-asynctask


    【解决方案1】:

    这种行为没有什么奇怪的。调用login.isErrorOccurd() 方法时,不会在辅助线程中检查登录。您可以使用Activity.runOnUiThread() 方法通知您的活动有关登录检查结果,或者您可以使用AsyncTask 类让它为您做这些事情。但无论如何,错误检查将在代码的其他部分。

    【讨论】:

    • 你可以,但你不能在启动一个检查登录的线程后立即这样做。该线程必须将检查结果通知您的活动,然后活动应根据检查结果执行一些操作。
    • 我如何从我的 AsyncTask 类通知活动?
    • 您应该从AsyncTask.doInBackground() 方法返回Boolean 结果。在AsyncTask.onPostExecute() 你可以检查这个结果。它将从doInBackground() 传递到那里。 onPostExecute() 在 UI 线程上执行,这就像一个隐式通知。如果您的AsyncTaskActivity 的内部类,您可以调用活动的方法,如YourActivity.this.processLoginResult()
    • 嗨 Pixie 如果异步任务不是直接从 UI 的 Activity 运行,那么最好的方法是什么?我有一个案例,我将 UI 活动对象传递给包含 Async 类的类,但是当回调 ui 到“processLoginResult()”时,即 ParentUIActivity.processLoginResult() 这将是一个内存问题,因为我'我担心这会导致 Async 类在父级完成之前无法被垃圾收集
    • 一般来说回答这个问题并不明显。例如,您可以在服务中执行身份验证。在您的情况下,您可以通过中断取消任务或对活动进行弱引用。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-04-22
    • 1970-01-01
    • 2011-07-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多