Android:Singleton DefaultHttpClient不会保留会话

时间:2012-10-26 20:45:08

标签: android

我在Android应用程序中使用DefaultHttpClient的单例实例,以便在登录后与我的网站的会话在多个活动中保持身份验证。

这是DefaultHttpClient的单例类:

public class Client {
  private static DefaultHttpClient instance = null;
  //handler for current response in UI thread after receiving it in AsyncTask
  private static HttpResponse currentResponse = null;

  //I also tried this without "synchronized"
  public synchronized static DefaultHttpClient getInstance()
  {
  if(instance == null)
    {
      instance = new DefaultHttpClient();
    }
    return instance;
  }
  public static void setCurrentResponse(HttpResponse response)
  {
    currentResponse = response;
  }
  public static HttpResponse getCurrentResponse()
  {
    return currentResponse;
  }
}

每次使用Client.getInstance()在AsyncTask中使用它时都会调用客户端。

我试过了:

ClientInstance = Client.getInstance();
Client.setCurrentResponse(ClientInstance.execute(HttpPost to execute));

我试过了:

Client.setCurrentResponse(Client.getInstance().execute(HttpPost to execute));

通过搜索找到了许多其他方法。

我也尝试过使用CookeStore和HttpContext,它会产生相同的结果。

当我从响应中获取实体时,对实体使用consumeContent()也无法解决问题。

我发现的一切都说使用DefaultHttpClient的单例实例允许它维护其会话,但是每次执行帖子来执行我的网站要求用户登录的操作时,我得到的响应主体back显示错误,指示未设置'user_id'会话变量(因此用户未登录)。我已经详尽地搜索了谷歌和Stack Overflow无济于事。有人可以指出我做错了吗?

1 个答案:

答案 0 :(得分:6)

对不起,伙计们。

在几乎失去理智之后,我又一次看了我的PHP代码。事实证明问题出现在我的网页上 - 我在接收移动HttpPost时不允许php调用session_start()。谁知道,也许我的问题/答案会帮助别人。