Java-Android AsyncTask和对象传递

Java-Android AsyncTask和对象传递,第1张

概述在登录过程中,我需要一些有关代码基本体系结构的帮助.我正在实现异步Http处理,以使ICS正常工作.这段代码的目标是登录我的应用程序.>从UI提交登录表单(Login.java)>连接到我们的服务器,并通过http传递用户名/密码以获取XML结果>将XML结果解析为数组.(ParseXML.java)>在用户界面

在登录过程中,我需要一些有关代码基本体系结构的帮助.我正在实现异步http处理,以使ICS正常工作.

这段代码的目标是登录我的应用程序.

>从UI提交登录表单(Login.java)
>连接到我们的服务器,并通过http传递用户名/密码以获取XML结果
>将XML结果解析为数组. (ParseXML.java)
>在用户界面中显示结果反馈.

现在这一切都在我的程序中起作用了,但是在尝试使用可强制执行A​​syc http连接的ICS测试之后,我很快意识到了我的问题,并让我怀疑我的整个设计…

当前工作的基本方式:

Login.java:

  class Login {    ...    ParseXML myXMLParser = new ParseXML();      myXMLParser.dologin(username, password, Login.this);        public doFinished(result) {      // update UI    }    ...  }

ParseXML.java:

  class ParseXML {    // class variable to hold login object for async to access    public Login loginobj;    ...    public voID dologin(String _username, String _password, Login _l) {      loginobj = (Login) _l;      ...      // create loginUrl string to run through async      ...      new DownloadfilesTask().execute(loginUrl);    }    class DownloadfilesTask extends AsyncTask<a, b, c> {      doInBackground() {        // do stuff        // download result of http call        // parse XML      }      onPostExecute(result) {                // call the public class variable of login object i have and tell it to update the UI        // pass back the result array.        loginobj.doFinished(result);      }    }  }

我最担心的是这样做的糟糕设计,我应该简单地将XML和http连接代码移到Login.java文件中,以便将其全部包括在内(UI,http,XML Parsing,Asyc).

特别是我关心从onPostExecute()返回Login.doFinished().这对记忆不好吗?我担心这会导致ParseXML对象避免垃圾回收,因为它现在返回到Login Activity,一旦用户再次登录并保持ParseXML打开,它将继续运行.

我来自PHP背景,因此我一直试图将所有XML解析和http处理保持在ParseXML“模块”中,以便我知道在哪里寻找对此进行更改的信息.

目前,ParseXML处理所有http工作,即getUsers,getChannels,addUser,delUser,dologin等.但是我是否应该尝试在相关屏幕/活动中移动所有代码以处理XML和http连接(异步),使它们独立存在? ?

我真的很感谢任何帮助

解决方法:

我应该简单地将XML和http连接代码移入Login.java文件中,以便将其全部包括在内(UI,http,XML解析,Asyc).

这正是我们在OO设计中要避免的事情,一个该死的类包含了所有内容(UI内容,业务逻辑等).

根据您的要求,一个好的OO deisgn IMO是:

>创建接口IBusnIEssDAO定义所有方法签名(getUsers,getChannels等).
>创建一个POJO(也就是普通的Java对象)类XmlParser实现IBusinessDAO,在该类中,正常编写方法实现,并且在此不处理任何异步执行(这不是Business POJO的工作).在调用者类(即“活动”)中确定要在何处以及如何使用这些方法(同步或异步).如果将来说,您想用JsonParser替换XmlParser,简单的创建JsonParser实现IBusinessDAO并替换XmlParser.
> AsyncTask始终与Activity(作为内部类)一起使用,如果Activity需要网络功能,只需在此Activity中初始化IbusinessDAO对象,并在AsyncTask.doInBackground()方法中正确调用与网络相关的方法,并更新所管理的UI内容通过此活动直接在AsyncTask.onPostExecute()方法中进行.

请查看我之前在此answer中编写的示例代码,希望对您有所帮助.

总结

以上是内存溢出为你收集整理的Java-Android AsyncTask和对象传递全部内容,希望文章能够帮你解决Java-Android AsyncTask和对象传递所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1085198.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-27
下一篇 2022-05-27

发表评论

登录后才能评论

评论列表(0条)

保存