您的位置:首页 > 理论基础 > 计算机网络

8.网络技术

2016-07-02 11:30 441 查看

1.webview

①在布局中加入WebView;



//绑定视图
webView = (WebView) findViewById(R.id.web_view);
//设置支持JavaScript脚本
webView.getSettings().setJavaScriptEnabled(true);
//设置从一个网页跳转到另一个网页时,不需要外部浏览器
webView.setWebViewClient(new WebViewClient(){
@Override
public boolean shouldOverrideUrlLoading(WebView view, WebResourceRequest request) {
view.loadUrl(request.getUrl().toString());
return true;
}
});
webView.loadUrl("http://www.baidu.com");


③加入权限:

2.使用HttpURLConnection

①接收

URL url = new URL("http://www.baidu.com");
connection = (HttpURLConnection) url.openConnection();
//接受服务器的返回的数据
connection.setRequestMethod("GET");
connection.setConnectTimeout(8000);
connection.setReadTimeout(8000);
InputStream in = connection.getInputStream();
BufferedReader reader = new BufferedReader(new
InputStreamReader(in));
StringBuilder response = new StringBuilder();
String line;
while ((line = reader.readLine()) != null) {
response.append(line);
}
Message message = new Message();
message.what = SHOW_RESPONSE;
// 将服务器返回的结果存放到Message中
message.obj = response.toString();
handler.sendMessage(message);


②发送

connection.setRequestMethod("POST");
DataOutputStream out = new DataOutputStream(connection.getOutputStream());
out.writeBytes("username=admin&password=123456");


3.使用HttpClient(已过时)

①接收

//因为HttpClient是借口,所以用多态创建实例对象。
HttpClient httpClient = new DefaultHttpClient();

//把链接传入HttpGet对象中
HttpGet get = new HttpGet("http://www.baidu.com");

//调用HttpClient的execute()方法传入get,得到一个服务器反馈的HttpResponse对象
HttpResponse response = httpClient.execute(get);

//response.getStatusLine().getStatusCode()如果等于200,说明请求和响应都成功了
if(response.getStatusLine().getStatusCode() ==200){
//调用getEntity()获得HttpEntity实例,EntityUtils.toString将服务器反馈的内容变成字符串类型,发送到handle进行处理。
HttpEntity entity = response.getEntity();
String s = EntityUtils.toString(entity,"utf-8");
Message message = new Message();
message.what = CHANGE_TEXT;
message.obj = s;
handler.sendMessage(message);


②发送

HttpPost httpPost = new HttpPost("http://www.baidu.com");
//新建一个储存对象为NameValuePair的集合。
List<NameValuePair> params = new ArrayList<NameValuePair>();
//将发送的内容存入BasicNameValuePair对象中再存入集合
params.add(new BasicNameValuePair("username", "admin"));
params.add(new BasicNameValuePair("password", "123456"));
//创建UrlEncodedFormEntity对象,传入集合
UrlEncodedFormEntity entity = new UrlEncodedFormEntity(params, "utf-8");
//吊桶HttpPost的setEntify方法,传入UrlEncodedFormEntity对象,完成发送
httpPost.setEntity(entity);


4.解析XML格式数据

4.1Pull解析方式

XmlPullParserFactory factory = XmlPullParserFactory.newInstance();
XmlPullParser xmlPullParser = factory.newPullParser();
//将要解析的数据传入
xmlPullParser.setInput(new StringReader(xmlData));
//得到当前解析事件
int eventType = xmlPullParser.getEventType();
String id = "";
String name = "";
String version = "";
//eventType不等于XmlPullParser.END_DOCUMENT说明解析工作还没有完成
while (eventType != XmlPullParser.END_DOCUMENT) {
//得到当前结点的名字
String nodeName = xmlPullParser.getName();
switch (eventType) {
// 开始解析某个结点
case XmlPullParser.START_TAG: {
if ("id".equals(nodeName)) {
id = xmlPullParser.nextText();
} else if ("name".equals(nodeName)) {
name = xmlPullParser.nextText();
} else if ("version".equals(nodeName)) {
version = xmlPullParser.nextText();
}
break;
}
// 完成解析某个结点
case XmlPullParser.END_TAG: {
if ("app".equals(nodeName)) {
Log.d("MainActivity", "id is " + id);
Log.d("MainActivity", "name is " + name);
Log.d("MainActivity", "version is " + version);
}
break;
}
default:
break;
}
//分析下一个结点
eventType = xmlPullParser.next();
}


4.2SAX解析方式

新建一个类继承自DefaultHandler,重写5个方法:

startDocument()方法会在开始XML 解析的时候调用
startElement()方法会在开始解析某个结点的时候调用
characters()方法会在获取结点中内容的时候调用
endElement()方法会在完成解析某个结点的时候调用
endDocument()方法会在完成整个XML 解析的时候调用

public void startDocument() throws SAXException {
id = new StringBuilder();
name = new StringBuilder();
version = new StringBuilder();
}

public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException {
// 记录当前结点名
nodeName = localName;
}

public void characters(char[] ch, int start, int length) throws SAXException {
// 根据当前的结点名判断将内容添加到哪一个StringBuilder对象中
if ("id".equals(nodeName)) {
id.append(ch, start, length);
} else if ("name".equals(nodeName)) {
name.append(ch, start, length);
} else if ("version".equals(nodeName)) {
version.append(ch, start, length);
}
}

public void endElement(String uri, String localName, String qName) throws SAXException {
if ("app".equals(localName)) {
Log.d("ContentHandler", "id is " + id.toString().trim());
Log.d("ContentHandler", "name is " + name.toString().trim());
Log.d("ContentHandler", "version is " + version.toString().trim());
// 最后要将StringBuilder清空掉
id.setLength(0);
name.setLength(0);
version.setLength(0);
}
}


MainActivity中

SAXParserFactory factory = SAXParserFactory.newInstance();
XMLReader xmlReader = factory.newSAXParser().getXMLReader();
ContentHandler handler = new ContentHandler();
// 将ContentHandler的实例设置到XMLReader中
xmlReader.setContentHandler(handler);
// 开始执行解析
xmlReader.parse(new InputSource(new StringReader(xmlData)));


5解析JSON格式数据

5.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");
Log.d("MainActivity", "id is " + id);
Log.d("MainActivity", "name is " + name);
Log.d("MainActivity", "version is " + version);
}


5.2使用GSON

先新建一个App类,设置id,name,version三个属性,然后在MainActivity中设置

Gson gson = new Gson();
//gson将传入的jsonDta解析成一个元素为App的List集合
List<App> appList = gson.fromJson(jsonData, new
TypeToken<List<App>>() {}.getType());
for (App app : appList) {
Log.d("MainActivity", "id is " + app.getId());
Log.d("MainActivity", "name is " + app.getName());
Log.d("MainActivity", "version is " + app.getVersion());
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: