DefaultHttpClient
と の間でCookie を共有するにはどうすればよいですWebView
か?
質問する
2822 次
1 に答える
0
ユーザーは、DefaultHttpClient と WebView の間での Cookie の共有を解決しました。このソリューションは彼にとってうまくいったので、彼はそこでコードを完全に共有したいと考えています。
LoginActivity.java のコア コードは doPost です。
private int mNumber = 3;
public InputStream doPost(String url, HashMap<String, String> params,
String headParam, ArrayList<String> keyValues) {
DefaultHttpClient httpClient = null;
InputStream inputStream = null;
HttpResponse httpResponse = null;
int statusCode = -1;
httpClient = (DefaultHttpClient) NetworkManager.getHttpClient();
HttpPost httpPost = new HttpPost(url);
if (headParam != null) {
httpPost.addHeader("Cookie", headParam);
}
if (params != null) {
List<NameValuePair> httpRequestParams = new ArrayList<NameValuePair>();
Iterator<Entry<String, String>> iter = params.entrySet().iterator();
while (iter.hasNext()) {
Map.Entry<String, String> entry = iter.next();
String key = entry.getKey();
String val = entry.getValue();
if (val.equals("multi")) {
for (String values : keyValues)
httpRequestParams.add(new BasicNameValuePair(key,
values));
} else
httpRequestParams.add(new BasicNameValuePair(key, val));
}
try {
httpPost.setEntity(new UrlEncodedFormEntity(httpRequestParams,
HTTP.UTF_8));
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
}
try {
httpResponse = httpClient.execute(httpPost);
} catch (ClientProtocolException e) {
e.printStackTrace();
httpPost.abort();
} catch (IOException e) {
e.printStackTrace();
httpPost.abort();
if (mNumber >= 1) {
mNumber--;
doPost(url, params, headParam, keyValues);
return null;
}
}
if (httpResponse != null) {
statusCode = httpResponse.getStatusLine().getStatusCode();
if (statusCode == HttpURLConnection.HTTP_OK) {
try {
inputStream = httpResponse.getEntity().getContent();
} catch (IllegalStateException e) {
e.printStackTrace();
httpPost.abort();
} catch (IOException e) {
e.printStackTrace();
}
} else {
if (mNumber >= 1) {
mNumber--;
doPost(url, params, headParam, keyValues);
} else {
}
}
} else {
if (mNumber >= 1) {
mNumber--;
doPost(url, params, headParam, keyValues);
}
}
Config.mCookies = httpClient.getCookieStore().getCookies(); //save cookies
return inputStream;
}
Config.java で:
public static List<Cookie> mCookies = null;
ログインに成功したら、webview を参照します。
List<Cookie> cookies = Config.mCookies;
if (cookies != null && !cookies.isEmpty()) {
CookieSyncManager.createInstance(mContext);
CookieManager cookieManager = CookieManager.getInstance();
for (Cookie cookie : cookies) {
Cookie sessionInfo = cookie;
String cookieString = sessionInfo.getName() + "="
+ sessionInfo.getValue() + "; domain="
+ sessionInfo.getDomain();
cookieManager.setCookie("http://stackoverflow.com", cookieString);
CookieSyncManager.getInstance().sync();
}
}
mWebview.loadUrl(mLink);
setCookie(url, string);
URL にはホストが必要です。最初はドメイン (例: stackoverflow.com
) だけを使用しましたが、うまくいきませんでした。ホストも含める必要があります (例: http://stackoverflow.com
)。
于 2014-07-02T15:11:44.930 に答える