为了账号安全,请及时绑定邮箱和手机立即绑定

自学android之网络笔记1

标签:
Android
  1. java.net 包可以大致分为两个部分:
    低级 API,用于处理以下抽象:
    地址,也就是网络标识符,如 IP 地址。
    套接字,也就是基本双向数据通信机制。
    接口,用于描述网络接口。
    高级 API,用于处理以下抽象:
    URI,表示统一资源标识符。
    URL,表示统一资源定位符。
    连接,表示到 URL 所指向资源的连接。
  2. java.net 包中的许多类可以提供更加高级的抽象,允许方便地访问网络上的资源。这些类为:
    InetAddress类:封装了主机和IP地址,
    、scoket和serverscoket;
    URI 是表示在 RFC 2396 中指定的统一资料标识符的类。顾名思义,它只是一个标识符,不直接提供访问资源的方法。
    URL 是表示统一资源定位符的类,它既是 URI 的旧式概念又是访问资源的方法。
    URLConnection 是根据 URL 创建的,是用于访问 URL 所指向资源的通信链接。此抽象类将大多数工作委托给底层协议处理程序,如 http 或 ftp。
    HttpURLConnection 是 URLConnection 的子类,提供一些特定于 HTTP 协议的附加功能。
    建议的用法是使用 URI 指定资源,然后在访问资源时将其转换为 URL。从该 URL 可以获取 URLConnection 以进行良好控制,也可以直接获取 InputStream。
    即:
    URI uri = new URI("http://ww.baidu.com");
    URL url = uri.toURL();
    InputStream in = url.openStream(); //
    HttpClient开源框架:已经被集成到我们的开发环境之中,是 Apache Jakarta Common 下的子项目,可以用来提供高效的、最新的、功能丰富的支持 HTTP 协议的客户端编程工具包;
    get和post方式请求数据方式的对比:get方式发送大小有限制,安全性不高,并且在客户端发送数据的时候要进行编码转换,httpconeciton默认的发送方式也是get;而post方式理论上发送的数据是没有限制的,手机内置的编码方式是utf-8,所以post方式请求的时候,可以不用转码。
    Post请求方式,数据通常是以实体的形式进行传递,实体参数保存在包含NameValuePair泛型参数的list之中。NameValuePair(String name, String value)//构造函数,可以将其看成一个Map,以键值对的形式存放参数。
    而get请求方式,参数通常是被附加在Url之中;所以在编写相关加载数据的线程类的时候,构造方法所含的成员变量会有差异;

以上几个类被用来从网络获取数据,而网络对于我们提交的请求通常是以Json或者Xml的形式返回相应的数据;所以接下来就是XMl和Json的解析:

  1. Pull解析
//Pull解析xml数据,str为待解析的字符串数据
    private void PullXML(String str) {
        // TODO Auto-generated method stub
        try {
            XmlPullParserFactory factory=XmlPullParserFactory.newInstance();
            XmlPullParser parser=factory.newPullParser();
            parser.setInput(new StringReader(str));
            String id="";
            String name="";
            String age="";
            int eventType=parser.getEventType();
            while(eventType!=XmlPullParser.END_DOCUMENT){
                String nodeName=parser.getName();
                switch (eventType) {
                case XmlPullParser.START_TAG: //开始解析
                    if("id".equals(nodeName)){
                        id=parser.nextText();
                    }else if("name".equals(nodeName)){
                        name=parser.nextText();
                    }else if("age".equals(nodeName)){
                        age=parser.nextText();
                    }
                    break;
                case XmlPullParser.END_TAG:  //结束解析
                    if("person".equals(nodeName)){
                        Log.i("info", "id="+id);
                        Log.i("info", "name="+name);
                        Log.i("info", "age="+age);
                    }

                default:
                    break;
                }//end switch
                eventType=parser.next();
            }//end while
        } catch (XmlPullParserException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }


解析Json格式的数据——1:

{
"employees": [
{ "firstName":"Bill" , "lastName":"Gates" },
{ "firstName":"George" , "lastName":"Bush" },
{ "firstName":"Thomas" , "lastName":"Carter" }
]
}
分析;最外层是一个JSONObject ,其值为一个JSONArray,数组中有包含了三个JSONObject ;
private void pareJson(String str) {
        // TODO Auto-generated method stub
        try {
            JSONObject jsonObject=new JSONObject(str);
            JSONArray array=jsonObject.getJSONArray("employees");
            for (int i=0; i<array.length(); i++)
            {
                JSONObject object=array.getJSONObject(i);
                Log.i("info", object.getString("firstName"));
                Log.i("info", object.getString("lastName"));
            }
        } catch (JSONException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
            Log.i("info", "没有获取解析结果1");
        }
    }
点击查看更多内容
3人点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消