cnfw
cnfw

Reputation: 800

How to import text from a webpage into a textview?

How do I get text from a basic HTML page and show it in a TextView.

I want to do it this way because it will look better than having a webview showing the text.

There is only one line on the html page. I can change it to a txt file if needed.

Could you also provide a quick example?

Upvotes: 0

Views: 1194

Answers (1)

Victor
Victor

Reputation: 1137

You would need to download the HTML first using something like HttpClient to retrieve the data from the Internet (assuming you need to get it from the Internet and not a local file). Once you've done that, you can either display the HTML in a WebView, like you said, or, if the HTML is not complex and contains nothing other than some basic tags (<a>, <img>, <strong>, <em>, <br>, <p>, etc), you can pass it straight to the TextView since it supports some basic HTML display.

To do this, you simply call Html.fromHtml, and pass it your downloaded HTML string. For example:

TextView tv = (TextView) findViewById(R.id.MyTextview);
tv.setText(Html.fromHtml(myHtmlString));

The fromHtml method will parse the HTML and apply some basic formatting, returning a Spannable object which can then be passed straight to TextView's setText method. It even supports links and image tags (for images, though, you'll need to implement an ImageGetter to actually provide the respective Drawables). But I don't believe it supports CSS or inline styles.

How to download the HTML:

myHtmlString in the snippet above needs to contain the actual HTML markup, which of course you must obtain from somewhere. You can do this using HttpClient.

private String getHtml(String url)
{
    HttpClient client = new DefaultHttpClient();
    HttpGet request = new HttpGet(url);
    try
    {
        HttpResponse response = client.execute(request);
        BufferedReader reader = new BufferedReader(new InputStreamReader(response.getEntity().getContent()));
        String line;
        StringBuilder builder = new StringBuilder();
        while((line = reader.readLine()) != null) {
            builder.append(line + '\n');
        }
        return builder.toString();
    }
    catch(Exception e)
    {
        //Handle exception (no data connectivity, 404, etc)
        return "Error: " + e.toString();
    }
}

It's not enough to just use that code, however, since it should really be done on a separate thread (in fact, Android might flat out refuse to make a network connection on the UI thread. Take a look at AsyncTasks for more information on that. You can find some documentation here (scroll down a bit to "Using Asynctask").

Upvotes: 1

Related Questions