2011-04-28 87 views
0

我有一個「本機」登錄屏幕,它設置一個靜態cookie,然後這個活動從LoginWebView獲取cookie。 我正在做一個異步任務。 現在的問題是,異步任務包含3個非常醜陋的黑客,這使得代碼非常不可靠(黑客標記在下面的代碼中)。異步任務,Web視圖,餅乾 - Android

問題是,你有什麼想法如何擺脫這些醜陋的黑客中的一個或多個?

哈克NR 1 - 這是從一個例子,有人張貼在這裏對堆棧溢出服用,餅乾需要等待一個位之前,它的實際工作,並加載在web視圖,我不知道爲什麼,但沒有它它只是不起作用。但這並不是最大的問題。

哈克NR 2 - 我不知道爲什麼,但如果我想能夠加載其他頁面我得先加載,我從拿到的cookie的網頁。當這個被加載時,我只需稍等一會,然後加載另一個url。有誰知道爲什麼? 如果我不這樣做,webview認識到cookie在那裏,但不會完成加載任何頁面,它只是加載和永不完成。

哈克NR 3 - 這只是補救黑客NR 2

private class WebViewTask extends AsyncTask<Void, Void, Boolean> { 
    String cookieString1; 
    CookieManager cookieManager; 

    @Override 
    protected void onPreExecute() { 

     Cookie sessionCookie = LoginWebView.cookie1;   
     CookieSyncManager.createInstance(WebViewActivity.this); 
     cookieManager = CookieManager.getInstance(); 

     cookieString1 = sessionCookie.getName() + "=" + sessionCookie.getValue() + "; " + 
     "domain=" + sessionCookie.getDomain(); 
     CookieSyncManager.getInstance(); 
        //cookieManager.removeSessionCookie(); 

     super.onPreExecute(); 
    } 
    protected Boolean doInBackground(Void... param) { 
     // HACK NR.1 
     SystemClock.sleep(600); 
     return false; 
    } 
    @Override 
    protected void onPostExecute(Boolean result) { 

     Log.v(TAG, "COOKIE SYNC 1: " + cookieString1); 
     Log.v(TAG, "COOKIE SYNC 1: " + domain); 
     cookieManager.setCookie(domain, cookieString1); 
     CookieSyncManager.getInstance().sync(); 


     WebSettings webSettings = webView.getSettings(); 
     webSettings.setSavePassword(true); 
     webSettings.setSaveFormData(true); 
     webSettings.setJavaScriptEnabled(true); 
     webSettings.setSupportZoom(false); 

     webView.setWebViewClient(new WebViewClient() { 
      @Override 
      public boolean shouldOverrideUrlLoading(WebView view, String url) { 
       Log.i(TAG, "Loading..."); 
       view.loadUrl(url); 
       return true; 
      } 
     }); 
        //HACK NR 2 
     webView.getSettings().setDefaultZoom(WebSettings.ZoomDensity.FAR); 
     webView.loadUrl(domain); 
     Log.v(TAG, "PROGRESS " + webView.getProgress()); 
     button1.setChecked(true); 

     if(webView.getProgress() == 100) { 
        //HACK NR. 3 
      SystemClock.sleep(80); 
      webView.getSettings().setDefaultZoom(WebSettings.ZoomDensity.MEDIUM); 
      clickButtonOne(); 
     } 
    } 
} 
+0

你真的有使用的AsyncTask?你不能只使用你的線程? – Yar 2011-04-29 08:43:05

+0

這是我第一次嘗試,但它是同樣的問題! – 2011-04-29 09:11:49

回答

1

也許你可以試試我在 android session management 提出了登錄活動可以利用一個連接線解決方案。 至於web視圖,您可以通過與(sCookie是靜態cookie字符串已被登錄活動設置)餅乾:

CookieSyncManager.createInstance(this); 
CookieManager cookieManager = CookieManager.getInstance(); 

String cookieString = sCookie+"; domain="+sDOMAIN; 
cookieManager.setCookie(sDOMAIN, cookieString); 
CookieSyncManager.getInstance().sync();