Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/190.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 使用httpPost和httpclient持久化cookie_Android_Cookies_Http Post_Httpclient_Cookiestore - Fatal编程技术网

Android 使用httpPost和httpclient持久化cookie

Android 使用httpPost和httpclient持久化cookie,android,cookies,http-post,httpclient,cookiestore,Android,Cookies,Http Post,Httpclient,Cookiestore,我有一个向Web服务发送请求的类 public class JSONParser { CookieStore store = new BasicCookieStore(); static InputStream is = null; static JSONObject jObj = null; static String json = ""; private static final DefaultHttpClient httpClient = new Defaul

我有一个向Web服务发送请求的类

public class JSONParser {
CookieStore store = new BasicCookieStore();
   static InputStream is = null;
    static JSONObject jObj = null;
    static String json = "";
    private static final DefaultHttpClient httpClient = new DefaultHttpClient() ;
 public static DefaultHttpClient getInstance() { return httpClient; }

public JSONObject getJSONFromUrl(String url, List<NameValuePair> params) {

    // Making HTTP request
    try {
        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);

        DefaultHttpClient httpClient = JSONParser.getInstance();
        List<Cookie> cookies = httpClient.getCookieStore().getCookies();
        httpClient.getParams().setParameter(CoreProtocolPNames.USER_AGENT, "Android-AEApp,ID=2435743");
        httpClient.getParams().setParameter(ClientPNames.COOKIE_POLICY, CookiePolicy.RFC_2109);
        HttpPost httpPost = new HttpPost(url);
        httpPost.setEntity(new UrlEncodedFormEntity(params));
        httpPost.setHeader("User-Agent","Android-AEApp,ID=2435743");

        cookies = httpClient.getCookieStore().getCookies();
        httpPost.setHeader("Accept", "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8");
        httpPost.setHeader("Cookie", "PHPSESSID=lc89a2uu0rj6t2p219gc2cq4i2; path=/");
        HttpResponse httpResponse = httpClient.execute(httpPost);
        HttpEntity httpEntity = httpResponse.getEntity();
        cookies = httpClient.getCookieStore().getCookies();

        if (cookies.isEmpty()) {
            for (Cookie a : cookies)
            cookieStore.addCookie(a);
        } else {
            for (Cookie a : cookies) {
                cookieStore.addCookie(a);
                System.out.println("- " + a.getValue().toString());
            }
        }

        is = httpEntity.getContent();


    } catch (UnsupportedEncodingException e) {
        e.printStackTrace();
    } catch (ClientProtocolException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    }
   }

然后我会收到新请求的cookies。当我尝试更新它们时,它会使用旧的。如果服务器更改了cookie,我如何更新cookie

问题解决了。我用单音作为我的曲奇列表。看起来是这样的:

public class CookieStorage {


    private ArrayList<Object> arrayList;

    private static CookieStorage instance;

    private CookieStorage(){
        arrayList = new ArrayList<Object>();
    }

    public static CookieStorage getInstance(){
        if (instance == null){
            instance = new CookieStorage();
        }
        return instance;
    }

    public ArrayList<Object> getArrayList() {
        return arrayList;
    }

    @Override
    public String toString()
    {       
    return getArrayList().toString();   
    }
}
在请求执行之后:

 httpResponse = client.execute(request);
            if (httpResponse.getLastHeader("Set-Cookie")!=null)
            {
                CookieStorage.getInstance().getArrayList().remove(0);
                CookieStorage.getInstance().getArrayList().add(httpResponse.getLastHeader("Set-Cookie").getValue());
            }

这里你真的是指JSONParser:DefaultHttpClient-httpClient=JSONParser.getInstance();你从哪里获得PHPSSID??in:httpPost.setHeader(“Cookie”,“PHPSESSID=lc89a2uuu0rj6t2p292199gc2cq4i2;path=/”;
if (CookieStorage.getInstance().getArrayList().isEmpty())
        CookieStorage.getInstance().getArrayList().add("PHPSESSID=lc89a2uu0rj6t2p219gc2cq4i2");
    RestClient.this.AddHeader("Cookie",  CookieStorage.getInstance().getArrayList().get(0).toString()); 
 httpResponse = client.execute(request);
            if (httpResponse.getLastHeader("Set-Cookie")!=null)
            {
                CookieStorage.getInstance().getArrayList().remove(0);
                CookieStorage.getInstance().getArrayList().add(httpResponse.getLastHeader("Set-Cookie").getValue());
            }