代码之家  ›  专栏  ›  技术社区  ›  Jim

android webview-1st loaddata()工作正常,后续调用不更新显示

  •  17
  • Jim  · 技术社区  · 15 年前

    在第一次调用loadData()之后,事件onloadResource将按其应该的方式激发,并且显示正常。接下来,我想用一个新页面刷新屏幕,当我使用loadData()时,第二次页面不更新,而onloadResource()不启动。

    然后第二次调用LoadData()OnlyFires OnPageFinished…onpagestarted永不开火!

    解决方法是在loadData()之后调用.reload(),但这会在活动中的其他逻辑期间导致各种问题。

    为什么loadData()不能多次工作?

    我使用的是非常简单的HTML,因为使用.reload()可以使它正常工作,所以我的loaddata()语句似乎没有问题。

    有什么想法会有帮助的,蒂亚

    7 回复  |  直到 9 年前
        1
  •  30
  •   Benjamin Cintix    15 年前

    使用

    webview.loadDataWithBaseURL("same://ur/l/tat/does/not/work", "data", "text/html", "utf-8", null);
    

    它很好用。 loaddata 下次加载数据时不刷新。

        2
  •  14
  •   John Carrell    11 年前

    出于某种原因,你必须先清除内容。“加载…”方法似乎没有显式附加其内容,但它不起作用。我想过去是 WebView.clearView() 但这已被否决。Android上已弃用方法的文档 site 实际上告诉你要用 WebView.loadUrl("about:blank") 作为这种方法的替代品。所以…

    WebView.loadUrl("about:blank");
    WebView.loadData(data, mime, encoding);
    

    …为我表演。看起来有点脏,但我不敢违抗谷歌!我不确定是否有其他人这样做,但我只是在加载一个字符串,我从一个“资产”中读取了这个字符串,我用它来显示帮助文档。所以我没有使用任何实际的URL;我只是使用WebView作为HTML呈现器。

    注意:对于那些新手(像我一样只有一个月前),确保用变量的实例替换“webview”。这些不是静态方法。

        3
  •  2
  •   Alexey Pelykh    14 年前

    这种方法是可行的

    webView.loadDataWithBaseURL("fake-url", "<html></html>", "text/html", "UTF-8", null);
    webView.loadData(htmlBuilder.toString(), "text/html", "UTF-8");
    
        4
  •  2
  •   FK Khan    9 年前

    那些仍然有问题的人,我找到了一个快速的解决方案,就用一个处理程序来解决这个问题。

        Handler handler = new Handler();
        handler.postDelayed(new Runnable() {
            @Override
            public void run() {
                webView.loadDataWithBaseURL("", html, "text/html", "UTF-8", null);
            }
        }, 10) ;
    
        5
  •  1
  •   user2666607    10 年前

    您需要将datawithbaseurl加载到 主线

        6
  •  -1
  •   user846969    13 年前

    每次更新时,我都能给HTML文档一个不同的ID,从而使浏览器刷新:请参见下面的//webview。

    package com.example.scroll;
    // philip r brenan at gmail.com, www.appaapps.com 
    import android.app.Activity;
    import android.content.Context;
    import android.os.Bundle;
    import android.util.Log;
    import android.webkit.WebView;
    
    public class MainActivity extends Activity
     {protected void onCreate(Bundle savedInstanceState)
       {super.onCreate(savedInstanceState);
        setContentView(new MyWebView(this)); 
       }
      class MyWebView extends WebView 
       {MyWebView(Context Context)
         {super(Context);
          getSettings().setJavaScriptEnabled(true);
          addJavascriptInterface(this, "Android");   
          new Thread()
           {public void run()
             {for(int j = 0; j < 100; ++j)
               {post(new Runnable()
                 {public void run()
                   {loadData(content(), "text/html", "utf-8"); // Display in browser
                   }
                 });    
                try {Thread.sleep(5000);} catch(Exception e) {}
               }  
             }
           }.start();
         } 
        int c = 0, C = 1;
        String content() 
         {final StringBuilder s = new StringBuilder();
          //s.append("<html id="+(C++)+"><body>"); // WEBVIEW REFRESHES CORRECTLY *************** 
          s.append("<html><body>");              // WEBVIEW DOES NOT REFRESH ******************
    
          s.append("<h1 id=11>1111</h1>");
          s.append("<script>location.href = '#22';</script>");
          for(int i = 0; i < 10; ++i) s.append("<p>"+c+c+c); ++c;
    
          s.append("<h1 id=22>2222</h1>");
          for(int i = 0; i < 10; ++i) s.append("<p>"+c+c+c); ++c;
          Log.e("AAAAAA", "content="+s.toString());
          s.append("</body></html>");
          return s.toString();
         }
       } 
     } 
    
        7
  •  -1
  •   user4067649    12 年前
    String urlUnique = String.format("http://%s", java.util.UUID.randomUUID().toString());
                        webView.loadDataWithBaseURL(urlUnique, "<html></html>", "text/html", "UTF-8", null);
                        Thread.sleep(200);
                        webView.loadData(htmlData, "text/html", "UTF-8");