Android 异步任务处理 UI

发布于 2024-11-18 18:01:23 字数 533 浏览 3 评论 0原文

我是安卓开发新手。我想完成如下描述的任务:

  • 调用外部类(另一个类将扩展 AsyncTask)来解析 xml 并接收 json< 的主要活动/code> 通过请求 Web 服务并启动 ProgressDialog
  • 该类在其 doInBackground 方法中执行 xmljson 解析。
  • 解析完成后,在 onPostExecute 方法中,关闭在主 Activity 中设置的 ProgressDialog
  • 我可以通过将 ProgressDialog 对象传递给解析类并在其 onPostExecute 方法中消除同一对象来实现此目的。

我认为传递 UI 对象的实例作为参数并不是一个好的编程方法,我希望必须有其他方法来解决。

请建议。 谢谢

I am new to android development. I would like to accomplish a task described as follows:

  • A main activty which calls external class(the other class would extend AsyncTask) to parse xml and receive json by requesting to web service and starts a ProgressDialog.
  • The class performs xml and json parsing in its doInBackground method.
  • In the onPostExecute method after parsing is complete, dismiss the ProgressDialog that was set in the main activity.
  • I could do this by passing the ProgressDialog object to the parsing class and dismissing the same object in its onPostExecute method.

I think passing an instance of UI object as argument is not a good approach to program, I hope there must be some other ways to work around.

Please suggest.
Thank you

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

飘过的浮云 2024-11-25 18:01:23

解耦这些的最简单方法是使用一个接口:

  1. 使用一个方法定义一个回调接口(我们称之为 WorkDoneListener):workDone()
  2. 声明您的活动类以实现 WorkDoneListener 并实现 workDone() 以关闭对话框。
  3. 定义 AsyncTask 的构造函数以接受 WorkDoneListener。将引用存储在成员字段中。
  4. onPostExecute 中,调用侦听器的 workDone() 方法。

The easiest way to decouple these is to use an interface:

  1. Define a call-back interface (let's call it WorkDoneListener) with a single method: workDone().
  2. Declare your activity class to implement WorkDoneListener and implement workDone() to dismiss the dialog.
  3. Define the AsyncTask's constructor to accept a WorkDoneListener. Stash the reference in a member field.
  4. In onPostExecute, call the listener's workDone() method.
帅气称霸 2024-11-25 18:01:23

Ted 的答案是,如果您的 AsyncTask 太大并且您想在其他文件中声明它,您应该做什么。但是,请记住,通常您在 UI 类中声明 AsyncTask

public class YourActivity extends Activity{
    private class YourAsyncTask extends AsynkTask<etc.>{
    }
}

事实上,如果您仅在该活动中使用 AsyncTask (我的意思是,如果您是不要在其他地方使用它),将 AsyncTask 声明为内部类是一个很好的设计实践。

Ted's answer is what you should do if your AsyncTask is too big and you want to declare it in other file. However, keep in mind that usually you declare the AsyncTask inside your UI class:

public class YourActivity extends Activity{
    private class YourAsyncTask extends AsynkTask<etc.>{
    }
}

In fact, if you are using you AsyncTask from that activity only (I mean, if you are not using it anywhere else), declaring the AsyncTask as a inner class is a good design practice.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文