1

Cookie ストアを宣言したときのアプリのクラッシュとエラーを修正しましたが、Cookie が保存されないか、他の場所で問題が発生しました。

最初に、次の 2 行を呼び出します。

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);
        }
    });
}

ただし、Cookie は使用しません。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 に答える