GeekBand--第七周分享
2016-04-12 21:11
330 查看
网络编程数据处理
发送网络请求
如何请求网络数据?注意要在AndroidManifest.xml中申请权限
<uses-permission android:name="android.permission.INTERNET"/>
还需要异步处理
//异步任务处理 class RequestNetworkDataTask extends AsyncTask<String,Integer,String> { //在后台work之前 @Override protected void onPreExecute() { super.onPreExecute(); //主线程 //加载数据 } @Override protected String doInBackground(String[] params) { String result = requestData(params[0]); return result; } @Override protected void onPostExecute(String s) { super.onPostExecute(s); //执行完之后再主线程中 //操作 } }
数据的处理
private String requestData(String urlString) { try { URL url = new URL(urlString); HttpURLConnection connection = (HttpURLConnection) url.openConnection();//建立一个连接 connection.setConnectTimeout(30000);//设置连接超过多少秒就取消 connection.setRequestMethod("GET");//设置请求方法 connection.connect(); // int response = connection.getResponseCode(); String responseMessage = connection.getResponseMessage();//得到msg if(responseMessage.equals(HttpURLConnection.HTTP_OK)){//判断msg InputStream inputStream = connection.getInputStream();//获取流 Reader reader = new InputStreamReader(inputStream, "UTF-8"); char[] buffer = new char[1024]; reader.read(buffer); return new String(buffer); } } catch (MalformedURLException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } return null; }
执行
new RequestNetworkDataTask().execute(url);
总的说就是
要有网络权限,要异步处理,处理中不要涉及到ui主线程!
请求结果如何处理
XML之SAX解析
//parse file by SAX private void testSAXParse(){ SAXParserFactory saxParserFactory = SAXParserFactory.newInstance(); try { SAXParser saxParser = saxParserFactory.newSAXParser();//解析器 XMLReader xmlReader = saxParser.getXMLReader();//XML读取器 SAXParseHandler saxParseHandler = new SAXParseHandler(); xmlReader.setContentHandler(saxParseHandler); InputStream inputStream = getResources().openRawResource(R.raw.test); InputSource inputSource = new InputSource(inputStream); xmlReader.parse(inputSource); saxParseHandler.getXMLList(); } catch (ParserConfigurationException e) { e.printStackTrace(); } catch (SAXException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } }
创建一个SAX的Handler
public class SAXParseHandler extends DefaultHandler { private static final CharSequence ITEM = "item"; List<WebURL> mWebURLs; WebURL webURL; @Override public void startDocument() throws SAXException {//开始 super.startDocument(); mWebURLs = new ArrayList<>(); } @Override public void endDocument() throws SAXException {//结束 super.endDocument(); } @Override public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException { //开始第一个对象 super.startElement(uri, localName, qName, attributes); webURL = new WebURL(); if(TextUtils.equals(localName,ITEM)){ for(int i=0;i<attributes.getLength();i++){ if(TextUtils.equals(attributes.getLocalName(i),"id")){} webURL.setmID(Integer.valueOf(attributes.getLocalName(i))); } state =1; } state =0; } @Override public void endElement(String uri, String localName, String qName) throws SAXException { //结束第一个对象 super.endElement(uri, localName, qName); if(TextUtils.equals(localName,ITEM)){ mWebURLs.add(webURL); } } @Override public void characters(char[] ch, int start, int length) throws SAXException { super.characters(ch, start, length); String content = String.valueOf(ch,start,length); if(state !=0){ mWebURLs.setContent(content); state = 0; } } public List<WebURL> getXMLList(){ return mWebURLs; } }
XML之PULL解析
//pull XmlResourceParser xmlResourceParser = getResources().getXml(R.xml.test); while(xmlResourceParser.getEventType() != XmlResourceParser.END_DOCUMENT) { if (xmlResourceParser.getEventType() == XmlResourceParser.START_DOCUMENT) { String name = xmlResourceParser.getName(); if(TextUtils.equals(tagName, "item")){ String id = xmlResourceParser.getAttributeValue(null,"id"); } } }
注意PULL解析文件需要放在XML文件夹中!
DOM解析与上都类似
XML和PULL分段读取。DOM读取整个文件(适用于小文件)
JSON解析
JSON和XML相比更加轻量!JSONLint!一个很好地工具!可以检查JSON的格式!并且格式化!
//JSON InputStream is = getResources().openRawResource(R.raw.json); String jsonString = getStringByInputStream(is); JSONObject jsonObject = new JSONObject(jsonString); jsonObject.get("title"); jsonObject.getJSONArray("images");
JSON之GSON解析
//GSON Gson gson = new Gson();
网络状态与扩展
网络状态处理
connectivityManagerNetworkInfo
public class NetworkUtil { public void testNetwork(Context context){ ConnectivityManager connectivityManager = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE); NetworkInfo networkInfo = connectivityManager.getNetworkInfo(connectivityManager.TYPE_MOBILE); boolean isWifiConnection = networkInfo.isConnected();//判断是不是wifi连接 networkInfo = connectivityManager.getNetworkInfo(connectivityManager.TYPE_MOBILE); boolean isMobileConnection = networkInfo.isConnected();//判断是不是流量连接 } public boolean isOnline(Context context){//判断是否在线 ConnectivityManager connectivityManager = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE); NetworkInfo networkInfo = connectivityManager.getActiveNetworkInfo(); return (networkInfo !=null && networkInfo.isConnected()); } }
拦截请求设置及代理
Fiddler(Windows)Charles(mac)
wifi设置代理
小技巧
Postman查询API了解Restful API
相关文章推荐
- json-lib
- C++实验3:个人所得税
- Flask 重定向用户和会话
- R的安装
- listview 滑动以后设置最上面一行为整行展示
- 剑指offer系列之43:左旋转字符串
- C++作业3
- VisionMobile:2016年IoT大趋势(笔记)(一)开发者是新基线
- 四大组件之Service 与Activity通信(2)
- c++作业3
- 第六周作业
- 各个方法的含义和优缺点
- springmvc文件上传
- poj 1066 Treasure Hunt
- OpenGL帧缓存对象(FBO)
- sql求解两个时间差
- Linux系统编程——I/O多路复用select、poll、epoll的区别使用
- 倒计时四天——7647:余数相同问题
- asp.net 页面url重写
- 视频直播技术