É possível obter dados de formulários HTML no Android enquanto estiver usando o webView?

Estou criando um formulário muito simples em HTML, que é visualizado no Android usando a webview que leva seu nome usando uma caixa de texto e, quando você clica no botão, ele é exibido em um parágrafo e é feito usando html e javascript. Este é o meu código html:

<!DOCTYPE html>
<html>
<body>
<p> Write your name and win your favorite game console name and win it! The winners will be announced in 4 days.</p>
Type your name here: <input id="thebox" type="text" name="value" value=""><br>

    <button onclick="myFunction()">Try it</button>

    <p id="demo"></p>

    <script>
    function myFunction() {
        var x = document.getElementById("thebox").value;
        document.getElementById("demo").innerHTML = x;
    }
    </script>

    </body>
    </html>

NOVO FORMULÁRIO EDITADO

<form name="albert" action="" method="POST">

 <label for="firstname"> First Name </label>
 <br /><br />

 <input type="text" name="firstname" id="firstname" />

 <input type="submit" name="sbumit" value="Submit" />


</form>

Eu quero obter o valor da caixa de entrada chamada "thebox" em uma variável no android no clique do botão e eu tentei muitas coisas antes e segui um método em que você injeta um arquivo JS, mas como eu não sei nada sobre JS, então eu falhou ao tentar isso e aqui está o arquivo que eu coloquei no meu projeto e o arquivo é chamado inject.js:

document.getElementsByTagName('form')[0].onsubmit = function () {
    var objPWD, objAccount, objSave;
    var str = '';
    var inputs = document.getElementsByTagName('thebox');
    for (var i = 0; i < inputs.length; i++) {
        if (inputs[i].name.toLowerCase() === 'thebox') {
            objAccount = inputs[i];
        }
    }
    if(objAccount != null) {
        str += objAccount.value;
    }
    if(objPWD != null) {
        str += ' , ' + objPWD.value;
    }
    if(objSave != null) {
        str += ' , ' + objSave.value;
    }
    window.AndroidInterface.processHTML(str);
    return true;
};

E, mais tarde, ao seguir esse artigo, ele disse que precisava colocar algumas coisas no meu MainActivity, mas como estou usando o webview pela primeira vez, não consegui entender muito e aqui está o código que coloquei no meu MainActivity:

 @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        WebView webView = new WebView(this);
        this.setContentView(webView);

        // enable javascript
        WebSettings webSettings = webView.getSettings();
        webSettings.setJavaScriptEnabled(true);
        webView.addJavascriptInterface(new JavaScriptInterface(), "AndroidInterface");

        // catch events
        webView.setWebViewClient(new WebViewClient(){
            @Override
            public void onPageFinished(WebView view, String url) {
                try {
                    view.loadUrl("javascript:" + buildInjection());
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        });

        webView.loadUrl("http://someurl.com");
    }

Uma classe aninhada que fiz na minha MainActivity:

class JavaScriptInterface {
        @JavascriptInterface
        public void processHTML(String formData) {
            Log.d("AWESOME_TAG", "form data: " + formData);
        }
    }

E, finalmente, o método que injeta o código:

private String buildInjection() throws IOException {
        StringBuilder buf = new StringBuilder();
        InputStream inject = getAssets().open("inject.js");// file from assets
        BufferedReader in = new BufferedReader(new InputStreamReader(inject, "UTF-8"));
        String str;
        while ((str = in.readLine()) != null) {
            buf.append(str);
        }
        in.close();

        return buf.toString();
    }

Quero obter valor do formulário html (caixa de entrada) que mostro em uma visualização da web no Android e é realmente possível fazer isso? Se sim, como e por favor explique? Obrigado e também por favor diga em qual variável vou obter o valor.

questionAnswers(8)

yourAnswerToTheQuestion