Java 如何存储cookie以用于与HttpClient的后续连接
我有以下代码将登录详细信息发布到网站。它可以工作,但我如何才能有会话cookie,这样我就不必再次登录其他页面 编辑:更新代码 进口Java 如何存储cookie以用于与HttpClient的后续连接,java,android,Java,Android,我有以下代码将登录详细信息发布到网站。它可以工作,但我如何才能有会话cookie,这样我就不必再次登录其他页面 编辑:更新代码 进口 public class Login extends Activity { Button bLogin; EditText teUsername, tePassword; CheckBox chbRememberPass; HttpClient httpclient; HttpResponse response;
public class Login extends Activity {
Button bLogin;
EditText teUsername, tePassword;
CheckBox chbRememberPass;
HttpClient httpclient;
HttpResponse response;
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.login);
initialiseVars();
httpclient = new DefaultHttpClient();
bLogin.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
checkLoginDetails();
test0();
}
});
}
private void initialiseVars() {
bLogin = (Button) findViewById(R.id.bLogin);
teUsername = (EditText) findViewById(R.id.etUsername);
tePassword = (EditText) findViewById(R.id.etPassword);
chbRememberPass = (CheckBox) findViewById(R.id.chkRememberPass);
}
private void checkLoginDetails() {
HttpPost httppost = new HttpPost(
"mywebsite/login.php");
// Add your data
List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(5);
nameValuePairs.add(new BasicNameValuePair("username", "admin"));
nameValuePairs.add(new BasicNameValuePair("password", "pass"));
try {
httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs));
Log.d("myapp", "works till here. 2");
try {
ResponseHandler<String> responseHandler = new BasicResponseHandler();
String responseBody = httpclient.execute(httppost, responseHandler);
Log.d("firstCon",responseBody);
} catch (ClientProtocolException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
}
private void test0() {
HttpGet httppost = new HttpGet(
"https://mywebsite/userSettings.php");
try {
response = httpclient.execute(httppost);
//String responseBody = EntityUtils.toString(response.getEntity());
try {
Log.d("secondCon", test());
} catch (Exception e) {
// TODO Auto-generated catch block
Log.d("seconderror", e.toString());
}
} catch (ClientProtocolException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
公共类登录扩展活动{
按钮博客;
编辑文本teUsername,tePassword;
复选框chbRememberPass;
HttpClient-HttpClient;
HttpResponse响应;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
//TODO自动生成的方法存根
super.onCreate(savedInstanceState);
setContentView(R.layout.login);
initialiseVars();
httpclient=新的DefaultHttpClient();
bLogin.setOnClickListener(新视图.OnClickListener(){
公共void onClick(视图v){
checkLoginDetails();
test0();
}
});
}
私有void initialiseVars(){
bLogin=(按钮)findviewbyd(R.id.bLogin);
teUsername=(EditText)findViewById(R.id.etUsername);
tePassword=(EditText)findViewById(R.id.etPassword);
chbRememberPass=(复选框)findViewById(R.id.chkremberpass);
}
私有void checkLoginDetails(){
HttpPost HttpPost=新的HttpPost(
“mywebsite/login.php”);
//添加您的数据
List nameValuePairs=新的ArrayList(5);
添加(新的BasicNameValuePair(“用户名”、“管理员”);
添加(新的BasicNameValuePair(“密码”、“通行证”);
试一试{
setEntity(新的UrlEncodedFormEntity(nameValuePairs));
Log.d(“myapp”,“工作到这里2”);
试一试{
ResponseHandler ResponseHandler=新BasicResponseHandler();
字符串responseBody=httpclient.execute(httppost,responseHandler);
Log.d(“firstCon”,响应库);
}捕获(客户端协议例外e){
e、 printStackTrace();
}捕获(IOE异常){
e、 printStackTrace();
}
}捕获(不支持的编码异常e){
e、 printStackTrace();
}
}
私有void test0(){
HttpGet httppost=新的HttpGet(
"https://mywebsite/userSettings.php");
试一试{
response=httpclient.execute(httppost);
//String ResponseBy=EntityUtils.toString(response.getEntity());
试一试{
Log.d(“secondCon”,test());
}捕获(例外e){
//TODO自动生成的捕捉块
Log.d(“seconderror”,例如toString());
}
}捕获(客户端协议例外e){
e、 printStackTrace();
}捕获(IOE异常){
e、 printStackTrace();
}
}
}
}
不要创建新的DefaultHttpClient
,而是重新使用它。您的Cookie存储在DefaultHttpCilent
中,因此如果您继续重用同一实例,您的Cookie将自动为您处理。我在类中全局声明了httpclient,但现在当我第二次尝试使用它时,它表示第一个方法正在使用它。当我执行httpclient.getConnectionManager().shutdown()时,第二个方法抛出错误,并指出管理器已关闭。如何在一次调用后实现它并将其交给另一个方法?@user521180:步骤#1:在活动的onCreate()
中创建DefaultHttpClient
。步骤2:在活动的ondestory()
中调用getConnectionManager().shutdown()
。步骤#3:如果您计划在多个线程中同时使用此功能,请附加一个ThreadSafeClientConnectionManager
,如中所述。第四步:根据需要使用DefaultHttpClient
。我已经用全班的代码更新了原始问题。您能告诉我如何做,以便test0()
可以按如下方式检索数据吗well@user521180:您已经编写了代码“以便test0()也可以检索数据”。但是当test0()
尝试检索userSettings.php
时,登录页面会出现问题,即使他第一次成功登录函数。因此,我需要保留会话或cookie,以便test0()
可以使用它。这就是我的问题所在