2012-05-15 27 views
12

Đối với Android CookieManager lớp học có một phương pháp - getCookie(String url).
Vì điều này, chúng tôi cần biết url chính xác.
Có cách nào để lấy tất cả cookie trong CookieManager và nhận các url không. một số điều như getCookies ?? Đây chỉ là để kiểm tra lại nếu tôi đang đưa ra bất cứ điều gì sai trong số url của mình cho cuộc gọi getCookie(String url). Tôi không nhận được cookie khi tôi gọi giống nhau.
Tôi đang chuyển hoàn thành IP address tại đây trong url. Một cái gì đó như thế này: "xx.x.x.x"Làm thế nào để có được tất cả các cookie từ CookieManager android?

Cảm ơn
Mia

+0

tôi đang cố gắng để giải nén cookie từ webview sau thành công Thông tin Đăng nhập- của nó rất đơn giản - Chuỗi cookieString = CookieManager.getInstance() getCookie ("xx.xxx); – mia

Trả lời

0

Bạn có thể use reflection để xem bản đồ cookie. Nó được gọi là mCookieMap trong phiên bản 4.0.3 (và có lẽ trong các bản phát hành trước đó). Loại là Bản đồ>. Đây không phải là một cách tuyệt vời để làm điều đó bởi vì bạn sẽ mạo hiểm phá vỡ trên các thiết bị khác nhau hoặc các phiên bản hệ điều hành nếu họ không sử dụng mCookieMap, nhưng CookieManager không cung cấp một cách công khai để biết URL nào được truy cập.

+0

Các cookie trong 4.2. .2 được lưu trữ nguyên bản, do đó, điều này sẽ không hoạt động: http://androidxref.com/4.2.2_r1/xref/frameworks/base/core/java/android/webkit/CookieManagerClassic.java – plinehan

+1

Tôi biết nó sẽ phá vỡ cuối cùng. :-) –

3

Tôi đã sử dụng CookieManager với gói java.net trong Ứng dụng Android của mình và nó hoạt động như một sự quyến rũ. Dưới đây là một đoạn mã:

import java.net.CookieHandler; 
import java.net.CookieManager; 
import java.net.CookiePolicy; 
import java.net.HttpCookie; 
import java.util.List; 

private class MyCookieManager 
{  
    private CookieManager mCookieManager = null; 

    MyCookieManager() { 
     mCookieManager = new CookieManager(); 
     mCookieManager.setCookiePolicy(CookiePolicy.ACCEPT_ALL); 
     CookieHandler.setDefault(mCookieManager); 
    } 

    private List<HttpCookie> getCookies() { 
     if(mCookieManager == null) 
      return null; 
     else 
      return mCookieManager.getCookieStore().getCookies(); 
    } 

    public void clearCookies() { 
     if(mCookieManager != null) 
      mCookieManager.getCookieStore().removeAll(); 
    } 

    public boolean isCookieManagerEmpty() { 
     if(mCookieManager == null) 
      return true; 
     else 
      return mCookieManager.getCookieStore().getCookies().isEmpty(); 
    } 


    public String getCookieValue() { 
     String cookieValue = new String(); 

     if(!isCookieManagerEmpty()) { 
      for (HttpCookie eachCookie : getCookies()) 
       cookieValue = cookieValue + String.format("%s=%s; ", eachCookie.getName(), eachCookie.getValue()); 
     } 

     return cookieValue; 
    } 

} 
+0

@stan khi tôi muốn sử dụng getCookieValue(), tôi phải tạo đối tượng của lớp MyCookieManager và trình xây dựng sẽ được gọi và mọi thời điểm mới của CookieManager sẽ được tạo mà không có cookie nào được lưu. CookieManager mặc định nơi tôi đã lưu cookie trước đây? –

+0

@HarshalBhatt, nó được cho là bạn tạo và giữ một trường hợp duy nhất của 'MyCookieManager' trong ứng dụng của bạn. Dù sao, tất cả các trường hợp thường sẽ trả lại cùng một tập hợp cookie từ kho lưu trữ cookie mặc định (hoặc cửa hàng tùy chỉnh nếu bạn sẽ thay đổi nguồn để cung cấp cửa hàng cụ thể trong hàm tạo 'CookieManager'). – Stan

Các vấn đề liên quan