Java Android:从网站读取HTML并将其发布到屏幕上

Java Android:从网站读取HTML并将其发布到屏幕上,java,android,html,parsing,sdk,Java,Android,Html,Parsing,Sdk,我的目标是创建一个非常基本的应用程序,它读取HTML并将其存储到字符串中。我只对网站来源的一行内容感兴趣。我发现了一个主题,它表明: String bodyHtml = "null"; try { String myUri = "http://www.spring8.or.jp/ext/ja/status/text.html"; HttpClient httpClient = new DefaultHttpC

我的目标是创建一个非常基本的应用程序,它读取HTML并将其存储到字符串中。我只对网站来源的一行内容感兴趣。我发现了一个主题,它表明:

String bodyHtml = "null";
            try {
                String myUri = "http://www.spring8.or.jp/ext/ja/status/text.html";
                HttpClient httpClient = new DefaultHttpClient();
                HttpGet get = new HttpGet(myUri);

                HttpResponse response = httpClient.execute(get);

                // Build up result
                bodyHtml = EntityUtils.toString(response.getEntity());
            } catch (Exception e) {

            }

            url.setText(bodyHtml);
url是我的文本视图。据我所知,我已在清单中正确设置了权限

但是,当我在手机和模拟器上运行此代码时,它似乎根本不起作用。我什么也得不到。我错过什么了吗


谢谢你

试试这个而不是实体工具

BufferedReader rd = new BufferedReader(new InputStreamReader(
        response.getEntity().getContent()));
String line = "";
String newLine = "";
while ((line = rd.readLine()) != null) {
    newLine = newLine.concat(line);
}
System.out.println(newLine);

在的execute方法中,也放置一个,如下所示:

HttpContext localContext = new BasicHttpContext();
HttpResponse response = httpClient.execute(get, localContext);
并使用:

如果它不起作用,你的互联网连接可能会有问题。 顺便说一句,别忘了android.permission.INTERNET权限

试试这个

调用下面的方法下载HTml内容并在参数中传递Url

private void downloadText(String urlStr) {
        progressDialog = ProgressDialog.show(this, "", 
                "Download Text from " + urlStr);
        final String url = urlStr;

        new Thread () {
            public void run() {
                int BUFFER_SIZE = 2000;
                InputStream in = null;
                Message msg = Message.obtain();
                msg.what=1;
                try {
                    in = openHttpConnection(url);

                    InputStreamReader isr = new InputStreamReader(in);
                    int charRead;
                      text = "";
                      char[] inputBuffer = new char[BUFFER_SIZE];

                          while ((charRead = isr.read(inputBuffer))>0)
                          {                    
                              String readString = 
                                  String.copyValueOf(inputBuffer, 0, charRead);                    
                              text += readString;
                              inputBuffer = new char[BUFFER_SIZE];
                          }
                         Bundle b = new Bundle();
                            b.putString("text", text);
                            msg.setData(b);
                          in.close();

                }catch (IOException e2) {
                    e2.printStackTrace();
                }
                messageHandler.sendMessage(msg);
            }
        }.start();    
    }
这是返回InputStream对象的帮助器方法

private InputStream openHttpConnection(String urlStr) {
    InputStream in = null;
    int resCode = -1;

    try {
        URL url = new URL(urlStr);
        URLConnection urlConn = url.openConnection();

        if (!(urlConn instanceof HttpURLConnection)) {
            throw new IOException ("URL is not an Http URL");
        }

        HttpURLConnection httpConn = (HttpURLConnection)urlConn;
        httpConn.setAllowUserInteraction(false);
    httpConn.setInstanceFollowRedirects(true);
    httpConn.setRequestMethod("GET");
    httpConn.connect(); 

    resCode = httpConn.getResponseCode();                 
    if (resCode == HttpURLConnection.HTTP_OK) {
        in = httpConn.getInputStream();                                 
    }         
    } catch (MalformedURLException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    }
    return in;
}
现在使用Handler在textView中显示字符串

private Handler messageHandler = new Handler() {

        public void handleMessage(Message msg) {
            super.handleMessage(msg);
            switch (msg.what) {

            case 1:
                TextView text = (TextView) findViewById(R.id.textview01);
                text.setText(msg.getData().getString("text"));
                break;
            }
            progressDialog.dismiss();
        }
    };

在清单中提供互联网权限

你在logcat中有什么错误吗?您是否已将此权限添加到AndroidMainfest.xml中?非常感谢各位的回复。我已经在模拟器上尝试过了,它确实有效。然而,它似乎对我的物理星系S2不起作用,即使它连接到互联网。有没有办法解决这个问题?到底发生了什么?整个应用程序突然崩溃,或者你得到的只是一个空的文本视图?不,应用程序没有崩溃。我没有像emulator那样获取HTML源代码,而是获取在尝试检索HTML源代码之前分配的空值。您是否已将INTERNET权限添加到清单中。如果有,请删除它,然后使用Android清单编辑器再次添加。我肯定已经这样做了,它不在应用程序部分。我真的不知道是什么原因导致了这种情况:(非常感谢,它在我的模拟器中工作。我在第一个响应中添加了一个问题。非常感谢,它在我的模拟器中工作。我在第一个响应中添加了一个问题。
private Handler messageHandler = new Handler() {

        public void handleMessage(Message msg) {
            super.handleMessage(msg);
            switch (msg.what) {

            case 1:
                TextView text = (TextView) findViewById(R.id.textview01);
                text.setText(msg.getData().getString("text"));
                break;
            }
            progressDialog.dismiss();
        }
    };