配置网络权限,在AndroidManifest.xml注册
<uses-permission android:name="android.permission.INTERNET"/>
初始化webview,请求并且执行网络操作。
mWebView = (WebView) findViewById(R.id.mWebView);
mSendUrlTask = new SendUrlTask("https://www.baidu.com");
mSendUrlTask.execute();
在SendUrlTask中完成网络请求操作。
里面有个doInBackground()方法,为了把URL传入到HttpUtil中,获取网址内容。
网络请求操作具体如下:
创建一个统一资源定位符URL
URL url = new URL(sendUrl);
通过这个对象获取HttpsURLConnection对象
HttpsURLConnection conn = (HttpsURLConnection) url.openConnection();
设置请求方式
conn.setRequestMethod("GET");
通过 HttpsURLConnection的getInputStream()方法获取他的读入流,把读入流包装成BufferReader,再将他每一行内容读到StringBuffer里再返回。
InputStream stream = conn.getInputStream();
BufferedReader reader = new BufferedReader(
new InputStreamReader(stream)
);
StringBuffer buffer = new StringBuffer();
String str = null;
while((str = reader.readLine())!= null){
buffer.append(str);
}
return buffer.toString();
然后将获得的内容在onPostExecute()方法中,通过
mWebView.loadData(s,"text/html;charset=utf-8",null);
加载出来。
因为执行网络请求操作比较耗时,所以使用AsyncTask去执行,
private class SendUrlTask extends AsyncTask<Void,Void,String>{
public String mUrl;
public SendUrlTask(String url){
mUrl = url;
}
@Override
protected String doInBackground(Void... voids) {
//网络请求操作
return HttpUtil.sendUrl(mUrl);
}
@Override
protected void onPostExecute(String s) {
super.onPostExecute(s);
mWebView.loadData(s,"text/html;charset=utf-8",null);
}
}
传入的参数即为上面的网址,返回为对应网址内容。
又为了防止内存泄露,SendUrlTask需要在onDestroy()中cancel掉。
看了网上关于http通信的文章以及视频,只能跟着他们做,还不是很明白如何操作,加上不懂需要什么方法,需要构造哪些方法。