1

当我声明一个 cookie 存储时,我修复了我的应用程序中的崩溃和错误,但它没有保存 cookie 或在其他位置出现问题。

起初我称这两条线:

AsyncHttpClient client = new AsyncHttpClient();
PersistentCookieStore myCookieStore;

然后我有一个帖子:

public void postRequestLogin(String url, RequestParams params) {
    myCookieStore = new PersistentCookieStore(this);
    client.post(url, params, new AsyncHttpResponseHandler() {
        @Override
        public void onSuccess(String response) {
            client.setCookieStore(myCookieStore);
            System.out.println(response);

            if(response.contains("Login successful!")) {
                TextView lblStatus = (TextView)findViewById(R.id.lblStatus);
                lblStatus.setText("Login successful!");
                getRequest("url");
            } else {
                TextView lblStatus = (TextView)findViewById(R.id.lblStatus);
                lblStatus.setText("Login failed!");
                TextView source = (TextView)findViewById(R.id.response_request);
                source.setText(response);
            }
        }
    });

}

然后它应该保存 Logincookies 并将其用于 GET 请求:

public void getRequest(String url) {
    myCookieStore = new PersistentCookieStore(this);
    client.get(url, new AsyncHttpResponseHandler() {
        @Override
        public void onSuccess(String response) {
            client.setCookieStore(myCookieStore);
            System.out.println(response);
            TextView responseview = (TextView) findViewById(R.id.response_request);
            responseview.setText(response);
        }
    });
}

但它不使用cookies。当我执行 GET 请求时,我已经注销。

编辑:我忘了说我使用了本教程中的一个库:http: //loopj.com/android-async-http/

4

1 回答 1

2

我认为问题在于您在请求完成后(在onSuccess方法中)设置了 cookie 存储。在发出请求之前尝试设置它:

myCookieStore = new PersistentCookieStore(this);
client.setCookieStore(myCookieStore);
client.post(url, params, new AsyncHttpResponseHandler() {

您还将针对每个请求创建一个新的 cookie 存储。如果您执行多个请求会发生什么?它将创建一个新的 cookie 存储并使用它(新的 cookie 存储不会有您的 cookie)。尝试将这部分代码移动到您的构造函数中:

myCookieStore = new PersistentCookieStore(this);
client.setCookieStore(myCookieStore);

然后将其从其他功能中删除。

于 2013-03-27T20:02:36.450 回答