我一直在寻找最简单的方法来将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专家。我想如果有人会解释我需要做什么,最好用例子。提前谢谢你
答案 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-get 和https://stackoverflow.com/a/6343299/1947419