[Android]VolleyのStringRequestでCookieを使えるようにカスタム

・リクエスト用のクラスファイル「SCStringRequest」を作成します。

//SCStringRequest.java
package <任意>;

import android.util.Log;
import android.webkit.CookieManager;

import com.android.volley.AuthFailureError;
import com.android.volley.NetworkResponse;
import com.android.volley.Response;
import com.android.volley.toolbox.StringRequest;

import java.util.HashMap;
import java.util.Map;

public class SCStringRequest extends StringRequest {
//ここにはドメインURLを指定する(例 : http://google.co.jp)
private static final String DOMAIN_URL = "ドメインURL";

public SCStringRequest(int method, String url, Response.Listener listener, Response.ErrorListener errorListener) {
super(method, url, listener, errorListener);
}

public SCStringRequest(String url, Response.Listener listener, Response.ErrorListener errorListener) {
super(url, listener, errorListener);
}

@Override
public Map getHeaders() throws AuthFailureError {
//クッキーを取り出してヘッダーにセット
CookieManager cm = CookieManager.getInstance();
String cookie = cm.getCookie(DOMAIN_URL);
Map headers = new HashMap();

headers.put("Cookie",cookie);

return headers;
}

@Override
protected Response parseNetworkResponse(NetworkResponse response) {
//リクエスト時、ネットワークから帰ってきたリクエストに含まれるクッキーをCookieManagerに保存する
Map headers = response.headers;
String cookie = (String) headers.get("Set-Cookie");

//ログ
Log.v("Login","cookie:"+cookie);
Log.v("Login","statusCode:"+response.statusCode);

CookieManager.getInstance().setCookie(DOMAIN_URL,cookie);

//ログ
String getcookie = CookieManager.getInstance().getCookie(DOMAIN_URL);
Log.v("Login", "getCookie:" + getcookie);

return super.parseNetworkResponse(response);
}
}

・次に実装側のActivityで以下を記述します。

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//クッキー利用時必要
CookieSyncManager.createInstance(this);
}

@Override
protected void onResume() {
super.onResume();
//クッキー利用時必要
CookieSyncManager.getInstance().startSync();
}

@Override
protected void onPause() {
super.onPause();
//クッキー利用時必要
CookieSyncManager.getInstance().stopSync();
}


POST通信などはStringRequestで行うのと同じ方法なので割愛します。


参考URL:CookieSyncManager::createInstance() needs to be called before CookieSyncManager::getInstance()
このエントリーをはてなブックマークに追加
Translation


プロフィール

チーズくん

Author:チーズくん
個人的メモをただ羅列しています。
twitter:@cheese1038

バロメーター
最新記事
最新コメント
最新トラックバック
月別アーカイブ
カテゴリ