Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/347.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java WebView抓取表单数据_Java_Javascript_Android_Html - Fatal编程技术网

Java WebView抓取表单数据

Java WebView抓取表单数据,java,javascript,android,html,Java,Javascript,Android,Html,我已经编写了一个混合应用程序,它是HTML5和android代码的混合-它工作得很好,但我有一些问题 我们的应用程序有一个人们将填写的表单(带有复选框和相应的数据以及注释部分)。此人可以单击每个复选框,但我需要填充单击的项目,获取他们选择的数据和他们所做的评论 最好的方法是什么?仅供参考:数据只是列在一个表中,每个表单的复选框数量会发生变化。但它们都与同一事物(或同一类)相关 我已经编写了一个javascript接口,但在找出解析表单数据的最佳方法时遇到了问题 谢谢 <

我已经编写了一个混合应用程序,它是HTML5和android代码的混合-它工作得很好,但我有一些问题

我们的应用程序有一个人们将填写的表单(带有复选框和相应的数据以及注释部分)。此人可以单击每个复选框,但我需要填充单击的项目,获取他们选择的数据和他们所做的评论

最好的方法是什么?仅供参考:数据只是列在一个表中,每个表单的复选框数量会发生变化。但它们都与同一事物(或同一类)相关

我已经编写了一个javascript接口,但在找出解析表单数据的最佳方法时遇到了问题

谢谢

           <form>
            <div id="colors">

                <table>
                    <tr>
                        <th>More header</th><th>NOHTING</th><th>Header</th><th></th>
                    </tr>
                    <tr>
                        <label for="checkbox1" id="checkbox-0">
                            <td class="stock">1261561</td>
                            <td class="etete">whatever</td>
                            <td class="gtgtg">random data</td>
                        </label>
                        <td class="add"><input type="checkbox" value="1" checked /></td>
                    </tr>
                    <tr>
                        <label for="checkbox2" id="checkbox-1">
                            <td class="stock">1261563</td>
                            <td class="etete">something</td>
                            <td class="gtgtg">details here</td>
                        </label>
                        <td class="add"><input type="checkbox" value="2" checked /></td>
                    </tr>
                    <tr>
                        <label for="checkbox3" id="checkbox-2">
                            <td class="stock">1261529</td>
                            <td class="etete">blah</td>
                            <td class="qtqtq">blah blah</td>
                        </label>
                        <td class="add"><input type="checkbox" value="3" checked /></td>
                    </tr>
                    <input type="hidden" id="hidden1" value="xxxxxx" />
                    <input type="hidden" id="hidden2" value="xxxxxxxxxx" />
                    <input type="hidden" id="hidden3" value="" />
                    <input type="hidden" id="fah21" value="x" />
                    <input type="hidden" id="asdf1" value="xxxx,xxx,xx" />
                </table>
            </div>
            <div id="footer">
                <textarea placeholder="Add Your Comments..."></textarea>
                <div id="cancel">
                    <img src="../images/cancel.png" height="50px" width="260px" onclick="goBack()">
                </div>
                <div id="save">
                    <img src="../images/save.png" width="260px" height="100px" onClick="parseForm()" />
                </div>
            </div>
        </form>

javascript接口可以获取任何数据,无论是JSON、原始数据还是任何数据——我将修复代码以使其正常工作

最简单的方法是包含JQuery函数,如下所示:

    $('form').submit(function() {
        Android.processFormData(decodeURIComponent($("form").serialize()));
        return false;
    });
一旦代码中有了它,就为它编写一个javascript接口,并像这样附加它:

    webview.addJavascriptInterface(new JavaScriptInterface(), "Android");
然后在代码中添加以下内容:

private class JavaScriptInterface{
    JavaScriptInterface(){}
    JavaScriptInterface(Context c){}

    public void saveSheetAndClose(){
        webview.goBack();
    }

    public void processFormData(String data) {
            //I'm just splitting and spitting it out to the log. You'd need to write
            //a parser here.

        String[] tokens = data.split("[&]+");
        for (int i = 0 ; i<tokens.length; i++){

            if (tokens[i].contains("check")){
                //I use | in checkboxes to separate multidata
                String Checkbox[] = tokens[i].split("[|]+");

                tokens[i] = "check";
                Log.i("TokenSplit", " " + tokens[i]);
                for (int j=0; j<Checkbox.length; j ++)
                    if (!Checkbox[j].contains("check"))
                    Log.i("TokenSplit", "     " + Checkbox[j]);
                    //cheap way of removing check= if you have multiple values
            }else{
                Log.i("TokenSplit", "" + tokens[i]);
            }
        }
        saveSheetAndClose();
    }
}
私有类JavaScriptInterface{
JavaScriptInterface(){}
JavaScriptInterface(上下文c){}
public void saveSheetAndClose(){
webview.goBack();
}
公共void processFormData(字符串数据){
//我只是把它劈开,吐到日志上。你需要写
//这里有一个解析器。
字符串[]标记=data.split([&]+”);

对于(int i=0;我可以粘贴布局的屏幕截图。这样我们就可以很容易地解决您的问题。我发布了表单和我做的JS-如果您需要更多,请告诉我。既然您使用的是jQuery,那么使用
form.serialize()怎么样
?form.serialize可以工作,但在将其推广到android时,我遇到了无法将特殊字符(如)转换为文字文本的问题。有什么想法吗?而且,它没有抓住复选框的标签。找到了!谢谢!android.processFormData(decodeURIComponent($(“form”).serialize());
private class JavaScriptInterface{
    JavaScriptInterface(){}
    JavaScriptInterface(Context c){}

    public void saveSheetAndClose(){
        webview.goBack();
    }

    public void processFormData(String data) {
            //I'm just splitting and spitting it out to the log. You'd need to write
            //a parser here.

        String[] tokens = data.split("[&]+");
        for (int i = 0 ; i<tokens.length; i++){

            if (tokens[i].contains("check")){
                //I use | in checkboxes to separate multidata
                String Checkbox[] = tokens[i].split("[|]+");

                tokens[i] = "check";
                Log.i("TokenSplit", " " + tokens[i]);
                for (int j=0; j<Checkbox.length; j ++)
                    if (!Checkbox[j].contains("check"))
                    Log.i("TokenSplit", "     " + Checkbox[j]);
                    //cheap way of removing check= if you have multiple values
            }else{
                Log.i("TokenSplit", "" + tokens[i]);
            }
        }
        saveSheetAndClose();
    }
}