WebView
可以在应用程序中嵌入一个浏览器,可以不跳转到浏览器应用展示网页。
WebView webView = (WebView)findByViewId(); webView.getSettings().setJavaScriptEnabled(true); //设置一些浏览器属性 webView.setWebViewClient(new WebViewClient()); webView.loadUrl("http://www.baidu.com");
本控件访问了网络,需要申请权限:INTERNET
使用HTTP协议访问网络
WebView已经在后台已经对发送HTTP请求、接受服务响应、解析返回数据、展示页面进行了封装。且WebView还有很多更高级的用法,《第一行代码》不做深入探讨。
Android6.0抛弃HttpClient后,发送HTTP请求则剩下使用HttpURLConnection。
private void sendRequestWithHttpURLConnection(){ //发送HTTP请求的方法 new Thread(new Runnable(){ //开启一个子线程用于发送Http请求 public void run(){ HttpURLConnection connection = null; NifferedReader reader = null; try{ URL url = new URL("https://www.baidu.com"); //设置URL对象 connection = (HTttpURLConnection)url.openConnection(); //获取HttpURLConnection实例 connection.setRequestMethod("GET"); //设置请求方法 connection.setConnectTimeout(8000); //设置连接超时 connection.setReadTimeout(8000); //设置读取超时,还可以设置希望得到的消息头等 InputStream in = connection.getInputStream(); //调用getInputStream获取返回的输入流 reader = new BufferedReader(new InputStreamReader(in)); //对输入流读取 StringBuilder reponse = new StringBuilder(); String line; while((line = read.readLine()) != null){ reponse.append(line); } catch(Exception e){ e.printStackTrace(); } finally{ if(reader != null){ try{ reader.close(); //关闭读取流 } catch(IOException e){ e.printStackTrace(); } } if(connection != null){ connection.disconnect(); //在finally中将connection链接关闭 } } } }).start(); //开启线程 }
在子线程中要进行UI操作需要切换到主线程,使用runOnUiThread()方法。
通过HTTP提交数据给服务器:
connection.setRequestMethod("POST"); DataOutputStream out = new DataOutputStream(connection.getOutputStream()); out.writeBytes("username=admin&password=123456"); //通过键值对形式,用&分割
使用HttpURLConnection基本步骤:
- 通过URL.openConnection()方法获取HttpURLConnection实例。
- 设置请求方法(get或post)。
- 设置请求属性。
- 获取数据、写出数据。
- 关闭各种流,利用HttpURLConnection.disconnect()关闭。
使用其他开源网络通信库代替原生的HttpURLConnection
OkHttp
接口封装简单易用,底层实现自成一派,已成为广大Android开发者首选的网络通信库。主页地址:https://github.com/square/okhttp
添加依赖
... implementation 'com.squqreup.okhttp3:okhttp:3.4.1' //最新版本号在主页上查看 ...
具体用法
OkHttpClient client = new OkHttpClient(); //创建一个OkHttpClient实例 Request request = new Request.Builder().[连缀][连缀].build(); //创建一个Request对象以发起Http请求 Response response = client.newCall(request).execute(); //调用OkHttpClient的newCall()方法创建一个Call对象,并调用其execute()方法来发送请求并获取服务器返回的数据 String responseData = response.body().string(); //获取返回的数据 //发起POST请求比GET复杂,需要先构建一个RequestBody对象来存放待提交的参数 RequestBody requestBody = new FormBody.Builder().[][]build(); //连缀可使用add()方法添加键值对参数 Request request = new Request.Builder().[][].buid(); //连缀加入url("http://xxx")和post(requestBody)方法可以设置Request对象的目标地址和传出的数据
- 创建一个OkHttpClient实例
- 创建request
- 创建response
- 获取返回的响应体或响应头信息
解析数据
XML使用较少,先跳过学习
解析JSON格式数据
JSON相比于XML,优点在于体积更小,缺点在于语义性较差,不直观。