2013-03-13 4 views
0

J'ai des requêtes http. L'un d'entre eux récupère et analyse les cookies de sa réponse. Je sauverai ce cookie par l'intermédiaire CookieSyncManager et CookieManager avec le code suivant:CookieManager.getCookie() renvoie la valeur null

CookieSyncManager.createInstance(context); 
      CookieManager cookieManager = CookieManager.getInstance(); 
      cookieManager.removeSessionCookie(); 
      cookieManager.removeAllCookie(); 
      String cookieString = cookie.getName() + "=" + cookie.getValue(); 
      Log.e(getClass().toString(), cookieString); 
      cookieManager.setCookie(START_PAYMENT_URL, cookieString); 
      CookieSyncManager.getInstance().sync(); 
      Log.e(getClass().toString(), "Get cookie: " + cookieManager.getCookie(START_PAYMENT_URL)); 

Les deux appels Log.e écrivent même cookie. Donc tout a l'air ok.

J'ai une activité différente qui contient WebView. J'ai besoin d'appeler la méthode postUrl(String url) avec quelques paramètres POST et avec cookie d'autorisation. Je pensais que cookie est dans CookieManager et tout devrait bien fonctionner. Bien. C'est. Mais sur les appareils 4.x seulement.

Sur les périphériques 2.x, WebView crée postUrl sans cookie.

est ici le code d'activité qui contient WebView.

 @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.payment_webview); 

     final String billId = getIntent().getStringExtra(INTENT_BILL_ID); 

     final WebView webView = (WebView) findViewById(R.id.payment_webview); 

     webView.getSettings().setJavaScriptEnabled(true); 

     webView.setWebViewClient(new WebViewClient() { 
      @Override 
      public boolean shouldOverrideUrlLoading(WebView view, String url) { 
       Log.e(getClass().toString(), url); 
       view.loadUrl(url); 
       return false; 
      } 
     }); 

     String postData = "id_bill=" + billId; 
     Log.d(TAG, "Requesting payment URL " + START_PAYMENT_URL + " with post data: " + postData); 
     Log.d(TAG, CookieManager.getInstance().getCookie(START_PAYMENT_URL)); 
     webView.postUrl(START_PAYMENT_URL, EncodingUtils.getBytes(postData, "BASE64")); 
    } 

CookieManager.getInstance() retourne getCookie (START_PAYMENT_URL) null sur les appareils 2.x et valeur du cookie sur les périphériques 4.x.

Comment résoudre ce problème?

Répondre

0

On dirait que j'ai compris quel est le problème.

Je viens enlevé

cookieManager.removeSessionCookie(); 
cookieManager.removeAllCookie(); 

alors que je suis l'enregistrement de cookies.

Je suppose que ce problème est que toutes les méthodes de CookieManager fonctionnent de manière asynchrone. Probablement supprimer les méthodes de cookies invoquées après cookieManager.setCookie(START_PAYMENT_URL, cookieString); même si elles ont appelé avant. Donc, CookieManager enregistre les cookies et ensuite supprime les méthodes de cookies invoquées.

Questions connexes