如何使用OkHttp - Android将html源代码转换为String

时间:2016-12-27 19:07:25

标签: java android html okhttp

我一直在寻找最简单的方法来将Html代码传递给String一段时间了。我只需要获取它以便我可以继续我的项目。

我试过了:

OkHttpClient client = new OkHttpClient();

String run(String url) throws IOException {
    Request request = new Request.Builder()
            .url(url)
            .build();

    Response response = client.newCall(request).execute();
    return response.body().string();
}

protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    text = (TextView) findViewById(R.id.text);

    String html= null;
    try {
        html = run("http://google.com");
    } catch (IOException e) {
        e.printStackTrace();
    }

    text.setText(html);
}

}

我得到了错误android.os.NetworkOnMainThreadException。

我刚开始在Android工作室开发,而且我也不是Java专家。我想如果有人会解释我需要做什么,最好用例子。提前谢谢你

2 个答案:

答案 0 :(得分:1)

正如@CommonsWare和@christian所说,你需要在后台进行网络操作,为此目的,Okhttp有一个特殊的方法enqueue()。这将为您创建一个后台线程并简化您的工作。

在您的情况下,将run()方法中的行更改为:

String run(String url) throws IOException {

    String result = "";

    Request request = new Request.Builder()
        .url(url)
        .build();

    Response response = client.newCall(request).enqueue(new Callback() {

        @Override
        public void onFailure(Call call, IOException e) {
            // failure case
        }

        @Override
        public void onResponse(Call call, Response response) throws IOException {
            // success case
            result = response.body().string();
        }
    });
}

答案 1 :(得分:0)

您需要在后台线程中进行网络操作,否则您将获得例外。 Android使其成为必需的,因为网络调用需要一些时间,UI-Thread将冻结。

请参阅https://github.com/square/okhttp/wiki/Recipes#asynchronous-gethttps://stackoverflow.com/a/6343299/1947419