我在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无济于事。有人可以指出我做错了吗?
答案 0 :(得分:6)
对不起,伙计们。
在几乎失去理智之后,我又一次看了我的PHP代码。事实证明问题出现在我的网页上 - 我在接收移动HttpPost时不允许php调用session_start()。谁知道,也许我的问题/答案会帮助别人。