webview加载完成后,从webview的getelementbyid获取innerText

时间:2018-12-22 00:15:24

标签: android webview

目前在我的onCreate

    webView.setWebChromeClient(new WebChromeClient() {
        public void onProgressChanged(WebView view, int progress) {
            if (progress == 100) {


                // get the innerText from user_id_firebase ID and put it in my db
                FirebaseDatabase database = FirebaseDatabase.getInstance();
                DatabaseReference myRef = database.getReference("message");

                myRef.setValue("Done Loading!");
            }
        }
    });

这可以确保我的Web视图已完成所有HTML的加载。此时,我需要通过其ID user_id_firebase获取元素的innerText,以便可以将其写入我的Firebase DB中。我遇到的麻烦是无法在setWebChromeClient

内部使用的堆栈上找到代码

我正在查看并将其放在if (progress == 100) {下,但是

webView.evaluateJavascript(
        "(function() { return ('<html>'+document.getElementsByTagName('user_id_firebase')[0].innerHTML+'</html>'); })();",
        new ValueCallback<String>() {
@Override
public void onReceiveValue(String html) {
        Log.d("HTML", html);
        // code here
        }
        });

但是我得到了

Variable 'webView' is accessed from within inner class, needs to be declared final

老实说,我是Android Studio的新手,所以有人有一些智慧吗?

1 个答案:

答案 0 :(得分:1)

因为您正在尝试访问匿名类内部的字段。 Java不允许这样做。简单的解决方案使您的webView变量成为final或像类字段一样声明。

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

CLI应用程序中的示例 enter image description here