从几个html页面检索数据的小部件

时间:2013-12-29 15:25:00

标签: javascript android webview android-widget widget

我使用webview在几步之后(登录,点击链接,运行javascript等)从html中检索一些数据,如下所述:how to get html content from a webview?将更多动作放入级联中。 我不使用线程,主要是当一个动作(例如登录)完成时,它被称为 onPageFinished ,这会激发另一个 webview.loadUrl ,依此类推另一个 onPageFinished ,直到执行完所有操作。

我想创建一个显示此结果的窗口小部件,在按下窗口小部件刷新按钮或每天早上12点时触发 webview.loadUrl 链。只有在完成所有链之后,才能在小部件中显示结果。

我已经阅读了一些教程,我看到有不同的方法,TimerTask,服务,广播接收器等,但我不明白哪个适合我的项目。 我不知道我的解释是否清楚,但在小部件的onUpdate中,我应该启动 webview.loadUrl 序列,但在最后 onPageFinished <之前我无法返回任何内容/ strong>被称为。

这就是我对链动作的意思,urlChain是一个静态字符串LinkedList,带有URL序列(和其他东西)。

@SuppressLint("SetJavaScriptEnabled")
private void callChain()
{
    /* WebViewClient must be set BEFORE calling loadUrl! */
    browser.setWebViewClient(new WebViewClient() {
        @Override
        public void onPageFinished(WebView view, String url)
        {
            /* This call inject JavaScript into the page which just finished loading. */
            if (!urlChain.isEmpty())
            {
                callChain();
            }
        }

    });

    /* load a web page */
    if (!urlChain.isEmpty())
    {
        String currentUrl;
        currentUrl = urlChain.pop();
        browser.loadUrl(currentUrl);
    }
}

1 个答案:

答案 0 :(得分:0)

Service或其他一些独立结构fireing an update to the widgetperforming an direct update on all widgets之后执行后台工作可能是一个好主意,然后会导致显示新数据。


在不了解您的确切项目的情况下,最干净的方式可能是SyncAdapter,在后台执行同步并更新ContentProvider,然后在更新小部件时可以使用它。

然而,根据您的实际需要,这可能是过度的(您需要在系统中注册同步帐户等)。您也可以让Service窗口小部件可以请求更新,然后在完成加载后使用相同的技术触发更新。

哦,如果你必须在凌晨12点结束,请看AlarmManager