Android学习第七周_网络编程数据处理
2016-04-17 11:52
323 查看
一、网络数据的获取
1、权限获取<uses-permission android:name="android.permission.INTERNET"/>
2、数据处理
public void onClick(View v) { switch(v.getId()){ case R.id.button_submit: String url = getEditTextUrl(); //请求网络数据 //1.申请网络权限 // String data = requestData(url); new RequestNetworkDataTask().execute(url); break; } } private String requestData(String urlString) { try { URL url = new URL(urlString); HttpURLConnection connection = (HttpURLConnection) url.openConnection(); connection.setConnectTimeout(5000); connection.setRequestMethod("GET"); connection.connect(); int responseCode = connection.getResponseCode(); String responseMessage = connection.getResponseMessage(); InputStream inputStream = connection.getInputStream(); Reader reader = new InputStreamReader(inputStream,"utf-8"); char[] buffer = new char[1024]; reader.read(buffer); String result = new String(buffer); return result; } catch (MalformedURLException e) { e.printStackTrace(); Toast.makeText(NetWorkActivity.this,"非法的url",Toast.LENGTH_SHORT).show(); } catch (IOException e) { e.printStackTrace(); Toast.makeText(NetWorkActivity.this,"读写异常",Toast.LENGTH_SHORT).show(); } return null; }
3、异步处理
//异步任务处理 class RequestNetworkDataTask extends AsyncTask<String,Integer,String>{ //在后台work之前 @Override protected void onPreExecute() { super.onPreExecute(); //主线程 //UI loading } @Override protected String doInBackground(String[] params) { // String result = requestData(params[0]); return result; } @Override protected void onPostExecute(String result) { super.onPostExecute(result); //执行完了之后在主线程中 mTextview.setText(result); } @Override protected void onCancelled() { super.onCancelled(); } @Override protected void onProgressUpdate(Integer... values) { super.onProgressUpdate(values); } }
4、总结
要执行网络操作,必须获取网络权限;在获取之后就可以通过HttpUrlConnection类获取网络的数据,最后需要在线程中对数据进行异步处理,不要在主线程中处理,这样会导致程序崩溃。
二、Xml文件的解析
1.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(); } }
2.pull的解析方式,以城市数据进行解析
@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); mButton = (Button) findViewById(R.id.create); mButton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { //获取src文件下的资源文件 InputStream is = getClassLoader().getResourceAsStream("weatherInfo.xml"); //拿到pull解析器 XmlPullParser xp = Xml.newPullParser(); //初始化 try { xp.setInput(is,"gbk"); //获取当前节点的事件类型,通过事件类型的判断,我们可以知道当前节点是什么节点,从而确定我们应该做什么操作 int type = xp.getEventType(); City city = null; while(type != XmlPullParser.END_DOCUMENT){ //根据节点的类型,要做不同的操作 switch (type){ case XmlPullParser.START_TAG: //获取当前节点的名字 if("weather".equals(xp.getName())){ //创建City集合对象 ,用于存放city的javabean mCityList = new ArrayList<City>(); } else if("city".equals(xp.getName())) { //创建城市的javabean对象 city = new City(); } else if("name".equals(xp.getName())){ //获取当前节点的下一个节点文本 String name = xp.nextText(); city.setName(name); } else if("temp".equals(xp.getName())){ //获取当前节点的下一个节点文本 String temp = xp.nextText(); city.setTemp(temp); } else if("pm".equals(xp.getName())){ //获取当前节点的下一个节点文本 String pm = xp.nextText(); city.setPm(pm); } break; case XmlPullParser.END_TAG: if("city".equals(xp.getName())){ mCityList.add(city); } break; } //把指针移动到下一个节点,并返回该节点的事件类型 type = xp.next(); } for (City c:mCityList ) { System.out.println(c.toString()); } } catch (XmlPullParserException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } } }); }
三、json数据的解析
1、类型JSONObject
JSONArray
JSONException
JSONStringer
JSONTokener
2、标识
- { }表示一个对象
- [ ]表示一个数据
3、基本操作
//JSON InputStream is = getResources().openRawResource(R.raw.json); String jsonString = getStringByInputStream(is); JSONObject jsonObject = new JSONObject(jsonString); jsonObject.get("title"); jsonObject.getJSONArray("images");
4、利用Gson库解析
(1)导入库
app—>Dependencies—->+—–>Libray dependency—–>搜索gson
(2)创建GSON对象
//GSON Gson gson = new Gson();
四、基本的网络操作
不多说,直接上代码:public class NetWorkUtil { public void testNetWork(Context context){ ConnectivityManager connectivityManager = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE); NetworkInfo networkInfo = connectivityManager.getNetworkInfo(ConnectivityManager.TYPE_WIFI); boolean isWifiConnection = networkInfo.isConnected(); 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()); } }
相关文章推荐
- http://liubin.org/promises-book/
- XCODE7以后不能使用HTTP协议解决办法
- XCODE7以后不能使用HTTP协议解决办法
- 遗传网络算法
- TCP为什么是三次握手,而不是两次
- 神经网络 neural network
- nefu500网购【二分+网络流】
- 贝叶斯网络的BDe BIC评分
- http2.0 相对于 http1.1的优势
- ARPspoofing
- 人工神经网络基本特点
- linux下select使用--转载http://www.cnblogs.com/moonvan/archive/2012/05/26/2518881.html
- 《原创》网络版五子棋node.js+websocket
- 计算机网络中的TCP/UDP协议到底是怎么回事(一)
- 记录两个免费HTTPS服务商
- DefaultHttpClient is deprecated
- Http Response Code
- 简单形象又有趣地说说强大的神经网络
- ASIHTTPRequest的使用——库文件的导入与设置
- CC2530低功耗终端不停重连网络耗电问题