【问题标题】:submit form data programmatically android (data lost)以编程方式提交表单数据android(数据丢失)
【发布时间】:2014-11-16 00:00:49
【问题描述】:

我正在为自己制作一个应用程序,以查看我大学的课程(已满)何时可用。

我需要我的应用程序能够以编程方式将信息输入“类搜索”表单并按下提交按钮,以便我可以检查是否有任何打开的类出现。

这里是表格的网址:https://css.nevada.unr.edu/psc/rncssprd/EMPLOYEE/HRMS/c/COMMUNITY_ACCESS.CLASS_SEARCH.GBL

到目前为止,我可以在表单中输入数据并在 web 视图中看到它的显示。问题是当我让程序单击提交按钮时没有任何反应。好吧,实际上它确实会搜索,但是我之前提交的数据会丢失,并且它在表单中没有值进行搜索。

这是我目前的代码:

public class Main extends Activity{

String URL = "https://css.nevada.unr.edu/psc/rncssprd/EMPLOYEE/HRMS/c/COMMUNITY_ACCESS.CLASS_SEARCH.GBL";
WebView mWebview;

int noRepeat = 0;

@Override
protected void onCreate(Bundle savedInstanceState) {
    // TODO Auto-generated method stub
    super.onCreate(savedInstanceState);

    new FetchItemsTask().execute();

}

private class FetchItemsTask extends AsyncTask<Void,Void,Boolean> {

    @Override 
    protected void onPreExecute() { 

    }

    @Override
    protected Boolean doInBackground(Void... params) {
        // TODO Auto-generated method stub

        return true;
    }

    @Override
    protected void onPostExecute(Boolean result) {
        // TODO Auto-generated method stub
        super.onPostExecute(result);


            mWebview = (WebView ) findViewById(R.id.webView1); 
            // load login url
            mWebview.loadUrl(URL); 
            //mWebview.setVisibility(View.INVISIBLE); 
            mWebview.getSettings().setJavaScriptEnabled(true); 

            mWebview.setWebViewClient(new WebViewClient() { 

                 public void onPageFinished(WebView view, String url) { 

                        // first time go to search page 

                         Toast.makeText(getApplicationContext(), "done loading login, pressing button", Toast.LENGTH_SHORT).show();

                         mWebview.loadUrl("javascript: {" +  "document.getElementById('SSR_CLSRCH_WRK_SUBJECT$0').value = '"+"temp1"+"';" + 
                         "document.getElementById('SSR_CLSRCH_WRK_CATALOG_NBR$1').value = '"+"temp2"+"';" + 
                         "document.getElementsByName('CLASS_SRCH_WRK2_SSR_PB_CLASS_SRCH')[0].click();" +
                         "};" ); // if I take out the click here the form will have temp1 and temp2 entered and everything fine, but it clicks temp1 and temp2 get cleared before it clicks some reason



                 }
            });


    }
}

感谢您的帮助,我很感激。如果您还需要查看该表单所在的网站。

【问题讨论】:

    标签: javascript android forms webview programmatically-created


    【解决方案1】:

    我怀疑不支持document.getElementsByName。我建议使用document.getElementById,因为链接(按钮)具有“id”属性。

    而不是

    document.getElementsByName('CLASS_SRCH_WRK2_SSR_PB_CLASS_SRCH')[0].click();:

    用途:

    document.getElementById('CLASS_SRCH_WRK2_SSR_PB_CLASS_SRCH').click();
    

    【讨论】:

    • 通过查看搜索表单中的代码,我注意到解释数据丢失的行为。如果您正在搜索 Class Nbr 83998,这应该对您有用。将其作为单行复制并粘贴到您的代码中(无需拆分)。我只是在设置值后执行与 onChange 中相同的 JavaScript 代码。 javascript: obj = document.getElementById('SSR_CLSRCH_WRK_CLASS_NBR$8'); obj.value = '83998'; addchg_win0(obj); doEdits_win0(obj,'S(5.0)','N','N','N','N','N','N',/^ *[0-9\,]*(\.[0-9\,]*)? *$/); document.getElementById('CLASS_SRCH_WRK2_SSR_PB_CLASS_SRCH').click(); void(0)
    • 非常感谢!那行得通!我很高兴自己不能做到这一点。吃披萨的时间。谢谢人:)
    • 不客气 - 很高兴我能帮上忙。解决方案是在特定输入字段中设置值,然后为该特定字段执行 onChange 事件中的任何内容(删除“return”关键字“)。如果您决定在另一个字段上使用代码,请检查该事件字段,否则它可能不起作用。由于实际上只有我最后的第二条评论是相关的,我将删除其他 cmets。我建议你对你的 cmets 做同样的事情:-)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-27
    • 2018-06-13
    相关资源
    最近更新 更多