网络HTTP协议

WebView:在应用中嵌入一个浏览器

1 ......
2     webView = (webView)findViewById(R.id.web_view);
3     webView.getSettings().setJavaScriptEnabled(true);  //设置支持JS
4     webView.setWebViewClient(new WebViewClient());  //跳转网页时,不打开系统浏览器,而是在当前webView中显示
5     webView.loadUrl("http://www.baidu.com");  //传入网址
6 ......

webView需要在AndroidManifest.xml中声明权限

 

HTTP协议

  原理:客户端向服务端发送一条HTTP请求,服务器收到请求后返回数据给客户端,客户端再对数据进行解析和处理。

  发送请求:HttpURLConnection和HttpClient两种方式;GET和POST两种方法。(GET从服务器获取数据,POST提交数据给服务器)

  HttpURLConnection:

    1、创建实例:new一个URL对象,并传入目标网络地址,调用openConnection()方法。

1 URl url = new URL("http://www.baidu.com");
2 HttpURLConnection connection = (HttpURLConnection)rul.openConnection();

    2、设置方法:connection.setRequestMethod("GET");

      3、其他设置:连接超时、读取超时、消息头等。

    4、调用getInputStream()获取服务器返回的输入流,并读取:InputStream in = connection.getInputStream();

    5、调用disconnect():connection.disconnect();

  HttpClient(接口):

    1、创建:HttpClient httpClient = new DefaultHttpClient();

    2、设置方法:GET:

            HttpGet httpGet = new HttpGet("http://www.baidu.com");

            httpClient.execute(httpGet);

            POST:

            HttpPost httpPost = new HttpPost("http://www.baidu.com");

            //创建NameValuePair结合存放待提交的参数

            List<NameValuePair>parms = new ArrayList<NameValuePair>();  

            prams.add(new BasicNameValuePair("username","admin"));  

            prams.add(new BasicNameValuePair("password","123456"));

            //传入entity

            UrlEncodedFormEntity entity = new UrlEncodedEntity(parms,"utf-8");

            httpPost.setEntity(entity);

            httpClient.execute(httpPost);

    3、返回HttoResponse对象,取出状态码:if(httpResponse.getStatusLine().getStatusCode()==200){......}

1 if(httpResponse.getStatusLine().getStatusCode()==200){
2   HttpEntity entity = httpResponse.getEntity();   
3   String response = EntityUtils.toString(entity,"utf-8");  //含有中文需要指定字符集为utf-8
4   Message message = new Message();
5   meesage.what = SHOW_RESPONSE;
6   message.obj = response.toString();
7   handler.sendMessage(message);     
8 }

 

解析xml:

  1、Pull解析

1 ......
2   XmlPullParserFactory factory = XmlPullParserFactory.newInstance();  //获得XmlPullParserFactory对象
3   XmlPullParser xmlPullParser = factory.newPullParser();  //获得XmlPullParser对象
4   xmlPullParser.setInput(new StringReader(xmlData));  //传入xml数据进行解析
5 ......

  2、Sax解析

  新建一个类继承DefaultHandler,并重写5个父类方法:startDocument()、startElement()、characters()、endElement()、endDocument()

1 ......
2   SAXParserFactory factory = SAXParserFactory.newInstance();  //获得SAXParserFactory对象
3   XMLReader xmlReader = factory.newSAXParser().getXMLReader();  //通过工厂获取XMLReader对象
4   ContentHandler handler = new ContentHandler();  
5   xmlReader.setContentHandler(handler);  //将handler对象设置到xmlReader中
6   xmlParser.parse(new InputSource(new StringReader(xmlData)));  //调用parse()解析
7 ......

解析JSON

  体积小,省流量

  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");
  }
......

  2、GSON解析

  需要下载一个gson的jar包放到libs目录下

  将一段JSON格式的字符串自动映射成一个对象。

......
  Gson gson = new Gson();
  List<App> appList =gson.fromJson(jsonData,new TypeToken<List<App>>(){}.getType());
  for(App app:appList){
    ......
  }
......

 

 

 

 

 

 

 

  

              

 

posted @ 2016-12-07 15:48  yl007  阅读(244)  评论(0编辑  收藏  举报