android中的会话问题

时间:2012-08-08 06:47:56

标签: php android session httpclient

在我的应用程序中,我正在使用PHP Web服务器。

在主要活动中,我使用用户名和密码建立与服务器的连接。 获取这些值后,服务器将启动我的会话。

因此,为了维护会话,我在整个应用程序中使用相同的HTTP客户端。

public static HttpClient httpclient = new DefaultHttpClient();

但问题是,大多数情况下,如果我想从服务器获取数据,我使用后台线程获取数据,然后更新UI线程。因此,当我在后台分配的客户端和用户尝试通过单击UI上的按钮进行其他连接时。它给了我这个例外

Invalid use of SingleClientConnManager: connection still allocated.

我正在捕获此异常,因此应用程序不会崩溃,但会话正在被破坏。因此我最终显示出“无与伦比”。在某些观点中。

任何人都可以帮助我更好地维护会话以及如何避免这种SingleClientConnManager异常。

谢谢

我想到了这种方法:

当应用程序使用java.lang.Thread.UncaughtExceptionHandler崩溃或提供singleClientConnManager异常(在任何一种情况下会话丢失)时,我使用共享首选项存储的用户名和密码再次建立与服务器的连接(这将启动再次会话)然后重启当前的Activity。我没试过这个,但我想知道这是一个好习惯吗?

1 个答案:

答案 0 :(得分:1)

您应该尝试避免该异常,不要抓住它并解决它!建议的方法对我来说 NOT 看起来不错。

在我看来,问题是你只有一个连接,但用户可以启动2.如果是这种情况,你应该能够处理它,或阻止用户这样做。

  • 一个选项是:识别您已经有连接(不要依赖此例外),然后开始一个新连接。我的意思是,在这种情况下,您不依赖于抛出异常的连接,而是通过“正常”方式(例如某些变量)检查是否已经存在。你可以从那里听到有点像黑客的东西(重新启动活动等),但是等待异常更好。

  • 另一个选项可能是阻止用户在另一个请求仍在进行时按下按钮,但取决于您的应用程序可能是用户界面失败。这取决于用户看到的内容以及我猜中发生了什么。你可以通过使用微调器,禁用所有形式的按钮来实现这一点,有很多方法可以实现这一点。

  • 最后,您可能希望“排队”请求,并在完成宝贵请求后将其发送到服务器。这样您就可以无异常地使用连接。我的意思是你保持原样,但按下第二个按钮后的动作是记住你必须做的动作,并在第一个动作返回后,然后检查是否还有其他事情要做。

不要依赖代码流的例外情况!