1、WebView 的用法java
Android 提供WebView 的用法,能夠在本身的應用程序裏嵌入一個瀏覽器node
- webView.getSettings().setJavaScriptEnabled(true);
- webView.setWebViewClient(new WebViewClient() {
-
-
- @Override
- public boolean shouldOverrideUrlLoading(WebView view, String url) {
- view.loadUrl(url);
- return true;
- }
-
-
- });
- webView.loadUrl("http://www.baidu.com");
聲明權限android
<uses-permission android:name="android.permission.INTERNET" />web
2、 HTTP 協議訪問網絡json
(1)使用 HttpURLConnection數組
獲取到 HttpURLConnection 的實例瀏覽器
- URL url = new URL("http://www.baidu.com");
- HttpURLConnection connection = (HttpURLConnection) url.openConnection();
設置一下 HTTP 請求所使用的方法緩存
connection.setRequestMethod("GET");服務器
置鏈接超時、讀取超時的毫秒數網絡
- connection.setConnectTimeout(8000);
- connection.setReadTimeout(8000);
InputStream in = connection.getInputStream();
- InputStream in = connection.getInputStream();
最後能夠調用 disconnect()方法將這個 HTTP 鏈接關閉掉
POST方法能夠這樣寫
- connection.setRequestMethod("POST");
- DataOutputStream out = new DataOutputStream(connection.getOutputStream());
- out.writeBytes("username=admin&password=123456");
(2) HttpClient
HttpClient 是一個接口,所以沒法建立它的實例,一般狀況下都會建立一個 DefaultHttpClient 的實例
- HttpClient httpClient = new DefaultHttpClient();
建立一個 HttpGet 對象,並傳入目標的網絡地址,而後調用 HttpClient 的 execute()方法
- HttpGet httpGet = new HttpGet("http://www.baidu.com");
- httpClient.execute(httpGet);
發起POST請求
- HttpPost httpPost = new HttpPost("http://www.baidu.com");
經過一個 NameValuePair 集合來存放待提交的參數,並將這個參數集合傳入到一個UrlEncodedFormEntity中,
而後調用 HttpPost的 setEntity()方法將構建好的 UrlEncodedFormEntity傳入
- List<NameValuePair> params = new ArrayList<NameValuePair>();
- params.add(new BasicNameValuePair("username", "admin"));
- params.add(new BasicNameValuePair("password", "123456"));
- UrlEncodedFormEntity entity = new UrlEncodedFormEntity(params, "utf-8");
- httpPost.setEntity(entity);
- httpClient.execute(httpPost);
執行 execute()方法以後會返回一個 HttpResponse對象, 服務器所返回的全部信息就會包含在這裏面
- if (httpResponse.getStatusLine().getStatusCode() == 200) {
- }
if 判斷的內部取出服務返回的具體內容,能夠調用 getEntity()方法獲取到一個 HttpEntity 實例,
而後再用 EntityUtils.toString()這個靜態方法將 HttpEntity 轉換成字符串
- HttpEntity entity = httpResponse.getEntity();
- String response = EntityUtils.toString(entity, "utf-8");
3、解析XML
(1)Pull解析
- protected void parseXMLWithPull(String response) {
-
- try {
- XmlPullParserFactory factory = XmlPullParserFactory.newInstance();
- XmlPullParser xmlPullParser = factory.newPullParser();
- xmlPullParser.setInput(new StringReader(response));
- int eventType = xmlPullParser.getEventType();
- String id = "";
- String name = "";
- String version = "";
- while (eventType != XmlPullParser.END_DOCUMENT) {
- String nodeName = xmlPullParser.getName();
- switch (eventType) {
- case XmlPullParser.START_TAG: {
- if ("id".equals(nodeName)) {
- id = xmlPullParser.nextText();
- } else if ("name".equals(nodeName)) {
- name = xmlPullParser.nextText();
- } else if ("version".equals(nodeName)) {
- version = xmlPullParser.nextText();
- }
- break;
- }
- case XmlPullParser.END_TAG: {
- if ("app".equals(nodeName)) {
- Log.d("MainActivity", "id is " + id);
- Log.d("MainActivity", "name is " + name);
- Log.d("MainActivity", "version is " + version);
- }
- break;
- }
- default:
- break;
- }
- eventType = xmlPullParser.next();
- }
-
- } catch (Exception e) {
-
- e.printStackTrace();
- }
- }
(2)SAX解析
新建一個類繼承自 DefaultHandler,並重寫父類的五個方法
- public class ContentHandler extends DefaultHandler {
- private String nodeName;
- private StringBuilder id;
- private StringBuilder name;
- private StringBuilder version;
-
- @Override
- public void startDocument() throws SAXException {
-
- id = new StringBuilder();
- name = new StringBuilder();
- version = new StringBuilder();
- }
-
- @Override
- public void endDocument() throws SAXException {
-
-
- }
-
- @Override
- public void startElement(String uri, String localName, String qName,
- Attributes attributes) throws SAXException {
-
- nodeName = localName;
- }
-
- @Override
- public void endElement(String uri, String localName, String qName)
- throws SAXException {
-
- if ("app".equals(localName)) {
- Log.d("ContentHandler", "id is " + id.toString().trim());
- Log.d("ContentHandler", "name is " + name.toString().trim());
- Log.d("ContentHandler", "version is " + version.toString().trim());
-
- id.setLength(0);
- name.setLength(0);
- version.setLength(0);
- }
- }
-
- @Override
- public void characters(char[] ch, int start, int length)
- throws SAXException {
-
- if ("id".equals(nodeName)) {
- id.append(ch, start, length);
- } else if ("name".equals(nodeName)) {
- name.append(ch, start, length);
- } else if ("version".equals(nodeName)) {
- version.append(ch, start, length);
- }
- }
-
- }
調用進行解析
- SAXParserFactory factory = SAXParserFactory.newInstance();
- XMLReader xmlReader = factory.newSAXParser().getXMLReader();
- ContentHandler handler = new ContentHandler();
- xmlReader.setContentHandler(handler);
- xmlReader.parse(new InputSource(new StringReader(xmlData)));
4、解析 JSON 格式數據
JSON 的主要優點在於它的體積更小,在網絡上傳輸的時
候能夠更省流量
(1)數據格式
[{"id":"5","version":"5.5","name":"Angry Birds"},
{"id":"6","version":"7.0","name":"Clash of Clans"},
{"id":"7","version":"3.5","name":"Hey Day"}]
(2)使用使用 JSONObject解析
- protected void parseJSONWithJSONObject(String response) {
- try {
- JSONArray jsonArray = new JSONArray(response);
- for (int i = 0; i < jsonArray.length(); i++) {
- JSONObject jsonObject = jsonArray.getJSONObject(i);
- String id = jsonObject.getString("id");
- String name = jsonObject.getString("name");
- String version = jsonObject.getString("version");
- Log.d("MainActivity", "id is " + id);
- Log.d("MainActivity", "name is " + name);
- Log.d("MainActivity", "version is " + version);
- }
- } catch (Exception e) {
- e.printStackTrace();
- }
- }
(3)使用 GSON
添加一個 GSON的 Jar包
首先新建與數據相對應的類,實現其getter和setter方法
解析代碼
- Gson gson = new Gson();
- List<App> appList = gson.fromJson(jsonData, newTypeToken<List<App>>() {}.getType());
- for (App app : appList) {
- Log.d("MainActivity", "id is " + app.getId());
- Log.d("MainActivity", "name is " + app.getName());
- Log.d("MainActivity", "version is " + app.getVersion());
- }
5、HttpURLConnection和HttpClient的區別(轉載自:百度知道)
Volley框架中在Android 2.3及以上版本,使用的是HttpURLConnection,而在Android 2.2及如下版本,使用的是HttpClient。Android中主要提供了兩種方式來進行HTTP操做,HttpURLConnection和HttpClient。這兩種方式都支持HTTPS協議、以流的形式進行上傳和下載、配置超時時間、IPv六、以及鏈接池等功能。
HttpClient:DefaultHttpClient和AndroidHttpClient都是HttpClient具體的實現類,它們都擁有衆多的API,並且實現比較穩定,bug數量也不多。但同時也因爲HttpClient的API數量過多,使得咱們很難在不破壞兼容性的狀況下對它進行升級和擴展HttpURLConnection:HttpURLConnection是一種多用途、輕量極的HTTP客戶端,使用它來進行HTTP操做能夠適用於大多數的應用程序。雖然HttpURLConnection的API提供的比較簡單,可是同時這也使得咱們能夠更加容易地去使用和擴展它。不過在Android 2.2版本以前,HttpURLConnection一直存在着一些使人厭煩的bug。 而在Android 2.3版本及之後,HttpURLConnection則是最佳的選擇。它的API簡單,體積較小,於是很是適用於Android項目。壓縮和緩存機制能夠有效地減小網絡訪問的流量,在提高速度和省電方面也起到了較大的做用。對於新的應用程序應該更加偏向於使用HttpURLConnection,由於在之後的工做當中咱們也會將更多的時間放在優化HttpURLConnection上面。 HttpURLConnection是java的標準類,HttpURLConnection繼承自URLConnection,可用於向指定網站發送GET請求、POST請求。它在URLConnection的基礎上提供了以下便捷的方法:int getResponseCode():獲取服務器的響應代碼。String getResponseMessage():獲取服務器的響應消息。String getResponseMethod():獲取發送請求的方法。void setRequestMethod(String method):設置發送請求的方法。 在通常狀況下,若是隻是須要Web站點的某個簡單頁面提交請求並獲取服務器響應,HttpURLConnection徹底能夠勝任。但在絕大部分狀況下,Web站點的網頁可能沒這麼簡單,這些頁面並非經過一個簡單的URL就可訪問的,可能須要用戶登陸並且具備相應的權限纔可訪問該頁面。在這種狀況下,就須要涉及Session、Cookie的處理了,若是打算使用HttpURLConnection來處理這些細節,固然也是可能實現的,只是處理起來難度就大了。 爲了更好地處理向Web站點請求,包括處理Session、Cookie等細節問題,Apache開源組織提供了一個HttpClient項目,看它的名稱就知道,它是一個簡單的HTTP客戶端(並非瀏覽器),能夠用於發送HTTP請求,接收HTTP響應。但不會緩存服務器的響應,不能執行HTML頁面中嵌入的Javascript代碼;也不會對頁面內容進行任何解析、處理。 簡單來講,HttpClient就是一個加強版的HttpURLConnection,HttpURLConnection能夠作的事情HttpClient所有能夠作;HttpURLConnection沒有提供的有些功能,HttpClient也提供了,但它只是關注於如何發送請求、接收響應,以及管理HTTP鏈接。 使用HttpClient發送請求、接收響應很簡單,只要以下幾步便可。(1)建立HttpClient對象。(2)若是須要發送GET請求,建立HttpGet對象;若是須要發送POST請求,建立HttpPost對象。(3)若是須要發送請求參數,可調用HttpGet、HttpPost共同的setParams(HetpParams params)方法來添加請求參數;對於HttpPost對象而言,也可調用 setEntity(HttpEntity entity)方法來設置請求參數。(4)調用HttpClient對象的execute(HttpUriRequest request)發送請求,執行該方法返回一個HttpResponse。(5)調用HttpResponse的getAllHeaders()、getHeaders(String name)等方法可獲取服務器的響應頭;調用HttpResponse的getEntity()方法可獲取HttpEntity對象,該對象包 裝了服務器的響應內容。程序可經過該對象獲取服務器的響應內容。 另外,Android已經成功地集成了HttpClient,這意味着開發人員能夠直接在Android應用中使用Httpclient來訪問提交請求、接收響應。好比一個Android應用須要向指定頁面發送請求,但該頁面並非一個簡單的頁面,只有當用戶已經登陸,並且登陸用戶的用戶名有效時纔可訪問該頁面。若是使用HttpURLConnection來訪問這個被保護的頁面,那麼須要處理的細節就太複雜了。 其實訪問Web應用中被保護的頁面,使用瀏覽器則十分簡單,用戶經過系統提供的登陸頁面登陸系統,瀏覽器會負責維護與服務器之間的Sesion,若是用戶登陸的用戶名、密碼符合要求,就能夠訪問被保護資源了。 在Android應用程序中,則可以使用HttpClient來登陸系統,只要應用程序使用同一個HttpClient發送請求,HttpClient會自動維護與服務器之間的Session狀態,也就是說程序第一次使用HttpClient登陸系統後,接下來使用HttpClient便可訪問被保護頁面了。