- java.net 包可以大致分为两个部分:
低级 API,用于处理以下抽象:
地址,也就是网络标识符,如 IP 地址。
套接字,也就是基本双向数据通信机制。
接口,用于描述网络接口。
高级 API,用于处理以下抽象:
URI,表示统一资源标识符。
URL,表示统一资源定位符。
连接,表示到 URL 所指向资源的连接。 - 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的解析:
- 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人点赞
评论
共同学习,写下你的评论
评论加载中...
作者其他优质文章
正在加载中
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦