4

WebサイトのHTMLコードを取得するAndroidアプリケーションを実行しています。このHTMLをロードする必要がWebviewありますが、プログラムを実行すると、「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;
    }

}

動作させるとgetCode webview.loadData("<h1> Test </h1>", "text/html; charset=UTF-8", null);()でs2を返すと動作しません。そして当然、s1を返すと機能しません。

この部分がアプリをクラッシュさせることを発見しました。なぜなのかご存知ですか ?

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

3 に答える 3

3

このようなTRy..

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;
            }
        }
    }

xmlwebviewを追加します。

<WebView android:layout_width="match_parent" 
  android:layout_height="match_parent" 
  android:id="@+id/mainWebView">
 </WebView>
于 2013-01-10T11:26:20.520 に答える
0

作成WebViewしたクラスを使用せずに、URLをロードするだけです。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これに従ってください:

assets/1)プロジェクトのフォルダに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;
    }

}
于 2013-01-10T11:44:09.563 に答える
0

あなたの場合、クラス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()

于 2013-01-10T11:52:26.283 に答える