Android 如何在DefaultHttpClient和WebView之间共享cookie
如何在Android 如何在DefaultHttpClient和WebView之间共享cookie,android,cookies,webview,Android,Cookies,Webview,如何在DefaultHttpClient和WebView之间共享cookies?用户解决了在DefaultHttpClient和WebView之间共享cookies的问题,所以他想在那里完全共享代码 java,核心代码是doPost: private int mNumber = 3; public InputStream doPost(String url, HashMap<String, String> params, String headParam, Array
DefaultHttpClient
和WebView
之间共享cookies?用户解决了在DefaultHttpClient和WebView之间共享cookies的问题,所以他想在那里完全共享代码
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;
}
private int mNumber=3;
公共InputStream doPost(字符串url、HashMap参数、,
字符串头参数,ArrayList键值){
DefaultHttpClient httpClient=null;
InputStream InputStream=null;
HttpResponse HttpResponse=null;
int statusCode=-1;
httpClient=(DefaultHttpClient)NetworkManager.getHttpClient();
HttpPost HttpPost=新的HttpPost(url);
if(headParam!=null){
httpPost.addHeader(“Cookie”,headParam);
}
如果(参数!=null){
List httpRequestParams=new ArrayList();
迭代器iter=params.entrySet().Iterator();
while(iter.hasNext()){
Map.Entry=iter.next();
String key=entry.getKey();
字符串val=entry.getValue();
如果(val.equals(“multi”)){
用于(字符串值:keyValues)
httpRequestParams.add(新的BasicNameValuePair(键,
价值观);
}否则
添加(新的BasicNameValuePair(key,val));
}
试一试{
setEntity(新的UrlEncodedFormEntity(httpRequestParams,
HTTP://UTF_8),;
}捕获(不支持的编码异常e){
e、 printStackTrace();
}
}
试一试{
httpResponse=httpClient.execute(httpPost);
}捕获(客户端协议例外e){
e、 printStackTrace();
httpPost.abort();
}捕获(IOE异常){
e、 printStackTrace();
httpPost.abort();
如果(mNumber>=1){
编号--;
doPost(url、参数、headParam、keyValues);
返回null;
}
}
if(httpResponse!=null){
statusCode=httpResponse.getStatusLine().getStatusCode();
if(statusCode==HttpURLConnection.HTTP\u确定){
试一试{
inputStream=httpResponse.getEntity().getContent();
}捕获(非法状态){
e、 printStackTrace();
httpPost.abort();
}捕获(IOE异常){
e、 printStackTrace();
}
}否则{
如果(mNumber>=1){
编号--;
doPost(url、参数、headParam、keyValues);
}否则{
}
}
}否则{
如果(mNumber>=1){
编号--;
doPost(url、参数、headParam、keyValues);
}
}
Config.mCookies=httpClient.getCookieStore().getCookies();//保存cookies
返回输入流;
}
在Config.java中:
public static List<Cookie> mCookies = null;
公共静态列表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);
List cookies=Config.mCookies;
if(cookies!=null&!cookies.isEmpty()){
createInstance(mContext);
CookieManager CookieManager=CookieManager.getInstance();
用于(Cookie:cookies){
Cookie会话信息=Cookie;
字符串cookieString=sessionInfo.getName()+“=”
+sessionInfo.getValue()+“域=”
+sessionInfo.getDomain();
cookieManager.setCookie(“http://stackoverflow.com“,cookieString);
CookieSyncManager.getInstance().sync();
}
}
mWebview.loadUrl(mLink);
setCookie(url,字符串);
url需要主机,起初他只使用域(例如,
stackoverflow.com
),但它不起作用。它还必须包括主机(例如,http://stackoverflow.com
)。感谢分享解决方案,但我建议编辑此帖子以符合SO的规则->让您的问题听起来更像问题(即“如何共享cookie…”就可以了),然后回答您自己的问题)。最后,如果没有人能提供更好的答案,接受你自己的答案。也许你可以编辑这个,并创建一个合适的答案。我想这样你会得到更多的投票。我不知道你是如何把网络视图和Cookies联系起来的。。它如何知道必须在webview中的请求中加载Cookie事实上,CookieSyncManager和CookieManager是为webview这样做的。