8.网络技术
2016-07-02 11:30
441 查看
1.webview
①在布局中加入WebView;②
//绑定视图 webView = (WebView) findViewById(R.id.web_view); //设置支持JavaScript脚本 webView.getSettings().setJavaScriptEnabled(true); //设置从一个网页跳转到另一个网页时,不需要外部浏览器 webView.setWebViewClient(new WebViewClient(){ @Override public boolean shouldOverrideUrlLoading(WebView view, WebResourceRequest request) { view.loadUrl(request.getUrl().toString()); return true; } }); webView.loadUrl("http://www.baidu.com");
③加入权限:
2.使用HttpURLConnection
①接收URL url = new URL("http://www.baidu.com"); connection = (HttpURLConnection) url.openConnection(); //接受服务器的返回的数据 connection.setRequestMethod("GET"); connection.setConnectTimeout(8000); connection.setReadTimeout(8000); InputStream in = connection.getInputStream(); BufferedReader reader = new BufferedReader(new InputStreamReader(in)); StringBuilder response = new StringBuilder(); String line; while ((line = reader.readLine()) != null) { response.append(line); } Message message = new Message(); message.what = SHOW_RESPONSE; // 将服务器返回的结果存放到Message中 message.obj = response.toString(); handler.sendMessage(message);
②发送
connection.setRequestMethod("POST"); DataOutputStream out = new DataOutputStream(connection.getOutputStream()); out.writeBytes("username=admin&password=123456");
3.使用HttpClient(已过时)
①接收//因为HttpClient是借口,所以用多态创建实例对象。 HttpClient httpClient = new DefaultHttpClient(); //把链接传入HttpGet对象中 HttpGet get = new HttpGet("http://www.baidu.com"); //调用HttpClient的execute()方法传入get,得到一个服务器反馈的HttpResponse对象 HttpResponse response = httpClient.execute(get); //response.getStatusLine().getStatusCode()如果等于200,说明请求和响应都成功了 if(response.getStatusLine().getStatusCode() ==200){ //调用getEntity()获得HttpEntity实例,EntityUtils.toString将服务器反馈的内容变成字符串类型,发送到handle进行处理。 HttpEntity entity = response.getEntity(); String s = EntityUtils.toString(entity,"utf-8"); Message message = new Message(); message.what = CHANGE_TEXT; message.obj = s; handler.sendMessage(message);
②发送
HttpPost httpPost = new HttpPost("http://www.baidu.com"); //新建一个储存对象为NameValuePair的集合。 List<NameValuePair> params = new ArrayList<NameValuePair>(); //将发送的内容存入BasicNameValuePair对象中再存入集合 params.add(new BasicNameValuePair("username", "admin")); params.add(new BasicNameValuePair("password", "123456")); //创建UrlEncodedFormEntity对象,传入集合 UrlEncodedFormEntity entity = new UrlEncodedFormEntity(params, "utf-8"); //吊桶HttpPost的setEntify方法,传入UrlEncodedFormEntity对象,完成发送 httpPost.setEntity(entity);
4.解析XML格式数据
4.1Pull解析方式
XmlPullParserFactory factory = XmlPullParserFactory.newInstance(); XmlPullParser xmlPullParser = factory.newPullParser(); //将要解析的数据传入 xmlPullParser.setInput(new StringReader(xmlData)); //得到当前解析事件 int eventType = xmlPullParser.getEventType(); String id = ""; String name = ""; String version = ""; //eventType不等于XmlPullParser.END_DOCUMENT说明解析工作还没有完成 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(); }
4.2SAX解析方式
新建一个类继承自DefaultHandler,重写5个方法:startDocument()方法会在开始XML 解析的时候调用 startElement()方法会在开始解析某个结点的时候调用 characters()方法会在获取结点中内容的时候调用 endElement()方法会在完成解析某个结点的时候调用 endDocument()方法会在完成整个XML 解析的时候调用 public void startDocument() throws SAXException { id = new StringBuilder(); name = new StringBuilder(); version = new StringBuilder(); } public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException { // 记录当前结点名 nodeName = localName; } public void characters(char[] ch, int start, int length) throws SAXException { // 根据当前的结点名判断将内容添加到哪一个StringBuilder对象中 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); } } 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()); // 最后要将StringBuilder清空掉 id.setLength(0); name.setLength(0); version.setLength(0); } }
MainActivity中
SAXParserFactory factory = SAXParserFactory.newInstance(); XMLReader xmlReader = factory.newSAXParser().getXMLReader(); ContentHandler handler = new ContentHandler(); // 将ContentHandler的实例设置到XMLReader中 xmlReader.setContentHandler(handler); // 开始执行解析 xmlReader.parse(new InputSource(new StringReader(xmlData)));
5解析JSON格式数据
5.1使用JSONObject
JSONArray jsonArray = new JSONArray(jsonData); 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); }
5.2使用GSON
先新建一个App类,设置id,name,version三个属性,然后在MainActivity中设置Gson gson = new Gson(); //gson将传入的jsonDta解析成一个元素为App的List集合 List<App> appList = gson.fromJson(jsonData, new TypeToken<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());
相关文章推荐
- facebook数据采集——利用BigPipe技术和xpath解析数据
- HttpURLConnection简介
- POJ - 3281 Dining 网络流
- 云图网络书签收藏分类管理
- HttpClient
- inux下网络发包工具 Tcpreplay3.x。
- nginx之ngx_http_limit_req
- CCU(网络游戏用语)的解释
- TCP/IP详解学习笔记(1)-基本概念
- HttpURLclient
- iOS开发 - 第04篇 - 网络 - 01 - NSOperation & 网络基础
- 神经网络图灵机(Neural Turing Machines, NTM)
- 关于“TCP segment of a reassembled PDU”
- 计算机网络--数据链路层
- 独立双(N)拥塞窗口的TCP单边加速思想
- HTTP Method小结(GET,POST.etc)
- 网络请求框架
- JavaScript数组知识网络
- Ubuntu系统安装、网络配置、lamp环境搭建
- Volley网络请求框架简析——Android网络请求框架(三)