web-dev-qa-db-ja.com

Android HttpClient永続的Cookie

更新:この質問とその回答は、これを読んでいる人にはお勧めできません。 AndroidはHttpClient(読み取り:非推奨)を推奨せず、代わりにHttpUrlConnectionを推奨しています 。現在使用するライブラリの良い例は、 RetrofitOkHttp です。この質問のコンテキストでは、Cookieを保存、保存し、後続のクエリで配信できます。これは透過的に処理されません。 OkHttpではインターセプターを使用できます

Androidアプリケーションに複数のインテントがあります。

最初のインテントはログインフォームで、以降のインテントはログインプロセスから提供されるCookieに依存しています。

私が抱えている問題は、Cookieがインテント間で永続化されていないように見えることです。私は各インテントで新しいHttpClientを作成しています(最初はParcelableで各インテントに送信しようとしましたが、うまく機能しませんでした)。

Cookieをインテント間で持続させるためのヒントはありますか?

37
Knossos

@Emmanuelが提案したことを実行するか、作成中のHttpClient間で BasicHttpContext を渡すことができます。

コンテキストとCookieの使用例 ここに完全なコード

    HttpClient httpclient = new DefaultHttpClient();

    // Create a local instance of cookie store
    CookieStore cookieStore = new BasicCookieStore();

    // Create local HTTP context
    HttpContext localContext = new BasicHttpContext();
    // Bind custom cookie store to the local context
    localContext.setAttribute(ClientContext.COOKIE_STORE, cookieStore);

    HttpGet httpget = new HttpGet("http://www.google.com/", localContext);
31
Aaron Saunders

新しいHttpClientを作成しないでください。これでCookieがクリアされます。単一のHttpClientを再利用します。

22
Emmanuel

HttpClientをシングルトンクラスにします。

4
user569873

applicationクラスでHttpClientを定義し、アクティビティで使用します。

アプリケーションで

public class AAA extends Application {
    public HttpClient httpClient; 

    httpClient = new DefaultHttpClient(); 

活動中

AAA aaa = (AAA)getApplication();
httpClient = app.httpClient;
4
panicstyle