2015-02-05 55 views
5

我是新手Java和嘗試刪除使用方法CookieManager :: removeAllCookies(ValueCallback回調)的WebView餅乾。無法確定必須傳遞給removeAllCookie方法的值。如何使用 「CookieManager :: removeAllCookies(ValueCallback <Boolean>回調)」

文檔https://developer.android.com/reference/android/webkit/ValueCallback.htmlhttps://developer.android.com/reference/android/webkit/CookieManager.html#getInstance%28%29沒有說如何使用它。

我的理解是ValueCallback與C++模板類似。但無法得到爲什麼要傳遞一個對象來刪除cookie。

+0

你閱讀該方法的文檔?你的代碼中的 – njzk2 2015-02-10 21:14:42

回答

12

從文檔:

如果提供了ValueCallback,onReceiveValue()將在當前線程的活套被調用一次操作完成。提供給回調的值指示是否刪除了任何Cookie。您可以傳遞null作爲回調,如果你不需要當操作完成或是否刪除任何cookie

這樣你就可以做到這一點

CookieManager.getInstance().removeAllCookies(new ValueCallback<Boolean>() { 
      @Override 
      public void onReceiveValue(Boolean value) { 
       Log.d(TAG, "onReceiveValue " + value); 
      } 
     }); 

CookieManager.getInstance().removeAllCookies(null); 
知道

此方法是在API級別21中引入的。如果您支持舊版本,則可能必須提供此類內容。

if(API Level >= 21){ 
    CookieManager.getInstance().removeAllCookies(null); 
}else{ 
    CookieManager.getInstance().removeAllCookie(); 
} 
+0

API代表什麼?我試圖實現它,但彈出導入像遊戲,安全網,我必須選擇。 – 2016-09-23 05:35:43

0

你需要在一個線程中調用它。

private class RemoveCookiesThread extends Thread { 
    private final ValueCallback<Boolean> mCallback; 

    public RemoveCookiesThread(ValueCallback<Boolean> callback) { 
     mCallback = callback; 
    } 

    public void run() { 
     Looper.prepare(); 

     if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { 
      CookieManager.getInstance().removeAllCookies(mCallback); 
     } else { 
      CookieSyncManager cookieSyncManager = CookieSyncManager.createInstance(mApplication); 
      cookieSyncManager.startSync(); 
      CookieManager.getInstance().removeAllCookie(); 
      cookieSyncManager.stopSync(); 
      mCallback.onReceiveValue(true);    
     } 

     Looper.loop(); 
    } 
} 

,然後啓動線程:

RemoveCookiesThread thread = new RemoveCookiesThread(callback); 
thread.start();