【问题标题】:webview doesn't load my htmlwebview 不加载我的 html
【发布时间】:2012-12-24 18:34:58
【问题描述】:

我正在做一个获取网站 HTML 代码的 Android 应用程序。我有一个 Webview 应该加载这个 HTML,但是当我运行我的程序时,我看不到我的“HTML”。

这是我的代码:

    package com.example.getdonnees;

import android.app.Activity;

import android.os.Bundle;

import android.webkit.WebView;

public class MainActivity extends Activity {

    WebView webview;

    Web web = new Web();

    @Override

    protected void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);

        setContentView(R.layout.activity_main);

        webview = (WebView)findViewById(R.id.webView1);

        webview.getSettings().setJavaScriptEnabled(true);

                try {

                    webview.loadData(web.getCode(), "text/html; charset=UTF-8", null);
                } catch (Exception e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }

    }


}



    package com.example.getdonnees;

import java.io.BufferedReader;

import java.io.InputStreamReader;

import java.net.URL;

import java.net.URLConnection;

import android.app.Activity;

import android.os.Bundle;

import android.webkit.WebView;

public class Web extends Activity {

    WebView webview;
    String s2 = "";

    public String getCode() throws Exception{
        URL oracle = new URL("http://www.google.com/");
        URLConnection yc = oracle.openConnection();
        BufferedReader in = new BufferedReader(new InputStreamReader(
                                    yc.getInputStream()));
        String inputLine;
        String s1 = "";
        while ((inputLine = in.readLine()) != null)
            s1 = s1 + inputLine;
        in.close();
        System.out.println(s1);
        s2 = "<h1> test </h1>";
        return s1;
    }

}

如果我输入webview.loadData("&lt;h1&gt; Test &lt;/h1&gt;", "text/html; charset=UTF-8", null); 它会起作用 如果我在 getCode() 中返回 s2,它就不起作用。 当然,如果我返回 s1,它就不起作用了。

我发现这部分会使应用程序崩溃。你知道为什么吗?

            try {
            in = new BufferedReader(new InputStreamReader(
                                        yc.getInputStream()));
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

【问题讨论】:

  • 你不能实例化一个Activity类不要为你的Web类扩展Activity
  • 当您使用Activity 扩展Web 类时。它永远不会在内存中初始化,因为您从未在Web class 中调用onCreate()。你根本不能instantiate Activity w/o onCreate()。所以尝试使用你的普通web Class

标签: java android html webview


【解决方案1】:

试试这样吧..

import android.app.Activity;
    import android.os.Bundle;
    import android.view.View;
    import android.webkit.WebSettings;
    import android.webkit.WebView;
    import android.webkit.WebViewClient;

    public class AndroidMobileAppSampleActivity extends Activity {
        /** Called when the activity is first created. */
        @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.main);

            WebView mainWebView = (WebView) findViewById(R.id.mainWebView);

            WebSettings webSettings = mainWebView.getSettings();
            webSettings.setJavaScriptEnabled(true);

            mainWebView.setWebViewClient(new MyCustomWebViewClient());
            mainWebView.setScrollBarStyle(View.SCROLLBARS_INSIDE_OVERLAY);

            mainWebView.loadUrl("http://seasonofrejoice.blogspot.com");
        }

        private class MyCustomWebViewClient extends WebViewClient {
            @Override
            public boolean shouldOverrideUrlLoading(WebView view, String url) {
                view.loadUrl(url);
                return true;
            }
        }
    }

添加xml webview..

<WebView android:layout_width="match_parent" 
  android:layout_height="match_parent" 
  android:id="@+id/mainWebView">
 </WebView>

【讨论】:

    【解决方案2】:

    您只需在您的WebView 中加载您的网址,而不使用您创建的Web 类:

    protected WebView webView;
    
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.main);
            webView = (WebView) findViewById(R.id.myWebView);
            webView.loadUrl("http://www.google.com");
        }
    

    如果您想将一些 HTML 代码加载到您的 WebView 中,请按照以下步骤操作:

    1) 在项目的assets/ 文件夹中创建一个 HTML 文件:example.html

    2) 然后像这样调用加载它:

    webView.loadUrl("file:///android_asset/example.html");
    

    在您的情况下,您的类 Web 正在扩展 Activity,而在 Android 您无法实例化 Activity,您应该覆盖方法onCreate() 然后把你的代码放进去。

    编辑:拆分 HTML 代码后,您可以将其加载到您的 WebView 中,如下所示:

    public final static void webViewLoadData(WebView web, String html) {
      StringBuilder buf = new StringBuilder(html.length());
      for (char c : html.toCharArray()) {
        switch (c) {
          case '#':  buf.append("%23"); break;
          case '%':  buf.append("%25"); break;
          case '\'': buf.append("%27"); break;
          case '?':  buf.append("%3f"); break;                
          default:
            buf.append(c); break;
          }
      }
      web.loadData(buf.toString(), "text/html", "utf-8");
    }
    

    编辑 2:

    public class Web {
    
        String s2 = "";
    
        public String getCode() throws Exception{
            URL oracle = new URL("http://www.google.com/");
            URLConnection yc = oracle.openConnection();
            BufferedReader in = new BufferedReader(new InputStreamReader(
                                        yc.getInputStream()));
            String inputLine;
            String s1 = "";
            while ((inputLine = in.readLine()) != null)
                s1 = s1 + inputLine;
            in.close();
            System.out.println(s1);
            s2 = "<h1> test </h1>";
            return s1;
        }
    
    }
    

    【讨论】:

    • 问题是我只想要 HTML 的一部分。所以我想把它全部拿走,把它放在一个字符串里,然后把它拆分成我想要的部分
    • 我认为您可以从 url 中检索 html 代码 :),因此在拆分后等,您可以将其加载到您的 WebView 中,就像我在编辑的答案中添加的那样
    • 好吧,我不确定我是否理解所有内容,但我尝试了一些方法:pastebin.com/yjv1C9XQpastebin.com/xWQNNu0X
    • 不,我现在正在做应用程序的图形,我稍后再试...我花了 2 天时间解决这个问题,但没有解决方案
    • @user1965878 : Web 类应该和我编辑的一样
    【解决方案3】:

    在您的情况下,您的类 Web 正在扩展 Activity ,而在 Android 中您无法实例化 Activity 类,您应该重写方法 onCreate()

    所以请删除extends Activity out of Web class

    public class Web
    {
     String s2 = "";
      public String getCode() throws Exception
      {
        URL oracle = new URL("http://www.google.com/");
        URLConnection yc = oracle.openConnection();
        BufferedReader in = new BufferedReader(new InputStreamReader(
                                    yc.getInputStream()));
        String inputLine;
        String s1 = "";
        while ((inputLine = in.readLine()) != null)
            s1 = s1 + inputLine;
        in.close();
        System.out.println(s1);
        s2 = "<h1> test </h1>";
        return s1;
       }
     }
    

    正如 Houcine 所举例说明的那样,这是放纵自己的正确方法webView.loadData()

    【讨论】:

    • 正如我告诉@Houcine 的,我只想要 HTML 的一部分,所以我把它全部拿走,把它放在一个字符串中,然后拆分它只取我想要的部分
    • @user1965878 我认为你可以通过getCode() 获取你的HTML 并返回webView.loadData(getCode,"text/html; charset=UTF-8", null);
    猜你喜欢
    • 1970-01-01
    • 2014-04-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-18
    • 1970-01-01
    • 1970-01-01
    • 2019-07-30
    相关资源
    最近更新 更多