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这样做的。