好的,我要向服务器请求一个url,然后将该URL加载到上WebView
,但是出现一个问题:当您运行http请求时,您需要在单独的线程中进行操作,并且loadUrl()
需要在UI线程。那么,我该怎么做才能首先发出请求,然后再加载URL?
该代码不在Activity中,因此我无法调用runOnUiThread(Runnable)
。
我该怎么做?
编辑:正如Alécio所建议的,最好不要在自定义视图中包含太多代码,因此我想做的是创建一个方法,当应用程序收到服务器的响应时,该方法允许我传递url。我用于请求的代码是:
HttpClient client = new DefaultHttpClient();
HttpPost post = new HttpPost("http://requesturl.com");
try {
HttpResponse response = client.execute(post);
InputStream content = response.getEntity().getContent();
String url = getStringFromInputStream(content);
//web.loadUrl(url);
} catch (ClientProtocolException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
因此,有可能知道何时收到响应?
WebView是一个UI组件,它必须位于Activity或Fragment的上下文中,因此来自UI线程的loadUrl()是可以的。
如果要进行服务器调用,请在UI上显示某些内容之前先处理响应,然后可以使用常规选项使用HttpURLConnection连接到服务器URL 。请参见下面的示例代码:
URL url = new URL("http://www.android.com/");
HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection();
try {
InputStream in = new BufferedInputStream(urlConnection.getInputStream());
readStream(in);
finally {
urlConnection.disconnect();
}
}
在此示例中,您确实需要在后台线程中执行它。永远不要来自UI线程。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句