2012-05-03 33 views
1

我要填寫與此代碼字段,但它給了我錯誤自動填寫網頁視圖中的Android領域

Account[] accounts = AccountManager.get(this).getAccounts(); 
    for (Account account : accounts) { 
     // TODO: Check possibleEmail against an email regex or treat 
     // account.name as an email address only for certain account.type values. 


     String possibleEmail = account.name; 



    myWebView.setWebViewClient(new HelloWebViewClient()); 

    setTitleColor(Color.GRAY); //the title bar color 
    myWebView.loadUrl("http://m.gmail.com"); 
    myWebView.loadUrl("javascript: {document.getElementById('id_email').value ='"+possibleEmail+"'};"); 


} 

它給了我這個錯誤

05-02 20:28:24.191:電子/ Web控制檯(1402):遺漏的類型錯誤:不能設置爲空值的特性 '值':1個

感謝您的幫助

回答

3

使用loadURL是異步的;換句話說,調用loadUrl會啓動HTTP請求,但會在文檔下載並呈現之前立即返回。您看到的錯誤是因爲您嘗試在文檔下載,解析和呈現之前過早執行JavaScript。

您需要使用WebViewClient,然後等待頁面完成加載後再執行JavaScript。嘗試onPageFinished回調,但要小心,有時你可以獲得多個回調,因爲iFrames等。

希望有所幫助。

編輯 如果你是針對KITKAT及以上,那麼你也必須照顧基於Android版本使用哪種方法。 Follwoing代碼給出了一個更好的解釋:

if (android.os.Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) 
{ 
     webView.evaluateJavascript(yourScript, null); 
} 
else 
{ 
     webView.loadUrl(yourScript); 

} 
+0

工作完美,謝謝 – GridSurfer

+0

嘿。你能請參考任何完整的例子。我之前沒有使用過這種代碼。 –