使用httpclient协议访问网络:

public class MainActivity extends Activity implements OnClickListener{
public void onClick(View v){
if(v.getId()==R.id.send_request){
sendRequestWithHttpClients();
}
}
private void sendRequestWithHttpClients(){
new Thread(new Runnable(){
public void run(){
try{
HttpClient httpClient=new DefaultHttpClient();//创建一个DefaultHttpClient实例,注意httpclient是一个接口不能直接创建实例
HttpGet httpget=new HttpGet("URL");创建httpget对象
HttpResponse httpResponse=httpClient.execute(httpGet);
if(httpResponse.getStatusline().getStatusCode()==){//首先取出状态码判断是否请求和响应成功
HttpEntity entity=httpResponse.getEntity();//调用getEntity获得实例并转化成字符
String response=EntityUtils.toString(entity,"utf-8");
Message message=new Message();
message.what=SHOW_RESPONSE;
message.obj=response.toString();
handler.sendMessage(message);
}
}catch(Exception e){ e.printStackTrace;}
}
}
}).start();
}
}

使用jsonobject解析服务器响应的数据:

private void parseJSONWithJSONObject(String jsonData){
try{
JSONArray jsonArray=new JSONArray(jsonData);//将返回的数据传入一个数组中
for(int i=;i<jsonArray.lenth();i++){
JSONObject jsonObject=jsonArray.getJSONObject(i);//调用getjsonobject获得实例再用getString取出打印就行
String id=jsonObject.getString("id");
String name=jsonObject.getString("name");
String version=jsonObject.getString("version");
Log.d("MainActivity","id is"+id);
.. }
}catch(Exception e){
e.printStackTrace;
}
}

网络编程的最佳实践:
为了在使用中更方便 所以把通用的操作提取到公共类中,并提供一个静态方法,为了防止请求网络的时候超时而影响主线程被阻塞,直接开启子线程又会无法返回数据,于是就启用java的回调机制

public interface HttpCallbackListener{  //接口中定义两个方法 使用onFinish()返回响应的数据,onError()在网络错误的时候调用
void onFinish(String response);
void onError(Exception e);
}
public class HttpUtil{
public static void sendHttpRequest(final String address,final HttpCallbackListener listener){
new Thread(new Runnable){
@Override
public void run(){
HttpURLConnection connection=null;
try{
URL url=new URL(address);
connection=(HttpURLConnection)url.openConnection();
connection.setRequestMethod("GET");
connection.setConnectTimeout();
connection.setReadTimeout();
connecion.setDoInput(true);
connection.setDoOutput(ture);
InputStream in=connecion.getInputStream();
BufferedReader reader=new BufferedReader(new InputStreamReader(in));
StringBuidler response=new StringBuidler();
String line;
while((line=reader.readLine())!=null){
response.append(line);
}
if(listener!=null){
listener.onFinish(response.toString());
}
}catch(Exception e){
if(listener!=null){listener.onError();}
}finally{
if(connection!=null){
connection.disconnect();
}
}
}
}.start();
}
}
特别注意:
如果需要根据返回的结果来更新ui那么也要一定使用异步消息处理机制,onfinish实际也是在子线程中运行的

android 网络技术基础学习 (七)的更多相关文章

  1. java网络爬虫基础学习(三)

    尝试直接请求URL获取资源 豆瓣电影 https://movie.douban.com/explore#!type=movie&tag=%E7%83%AD%E9%97%A8&sort= ...

  2. Android 网络编程基础之简单聊天程序

    前一篇讲了Android的网络编程基础,今天写了一个简单的聊天程序分享一下 首先是服务端代码: package com.jiao.socketdemo; import java.io.Buffered ...

  3. java网络爬虫基础学习(一)

    刚开始接触java爬虫,在这里是搜索网上做一些理论知识的总结 主要参考文章:gitchat 的java 网络爬虫基础入门,好像要付费,也不贵,感觉内容对新手很友好. 一.爬虫介绍 网络爬虫是一个自动提 ...

  4. Android网络编程基础

    Android网络编程只TCP通信 TCP 服务器端工作的主要步骤如下.步骤1 调用ServerSocket(int port)创建一个ServerSocket,并绑定到指定端口上.步骤2 调用acc ...

  5. Python基础学习七 网络编程

    主要应用urllib和requests模块 urllib模块返回类型为bytes,需要数据类型转换:requests就方便很多. 例子1:发送post请求 url = 'http://api.nnzh ...

  6. 无线Mesh网络技术基础与应用

    无线Mesh网络主要包含三类节点,构成了Mesh的基本服务集. 1.与有线网络相连的节点(GateWay节点),其主要负责实现无线Mesh网络和有线网络的数据交换. 2.可以进行Mesh组网并拥有Ro ...

  7. 个人笔记——Android网络技术

    一.WebView 的用法 Android 提供WebView 的用法,可以在自己的应用程序里嵌入一个浏览器 webView.getSettings().setJavaScriptEnabled(tr ...

  8. Android 网络技术HTTP

    1.XML3种解析方式(DOM.SAX.PULL) 在网络上传输数据时最常用的格式有两种,XML 和JSON 这里首先明白什么是SAX是一个用于处理XML事件驱动的"推"模型,优点 ...

  9. 爬虫技术 -- 基础学习(一)HTML规范化(附特殊字符编码表)

    最近在做网页信息提取这方面的,由于没接触过这系列的知识点,所以逛博客,看文档~~看着finallyly大神的博文和文档,边看边学习边总结~~ 对网站页面进行信息提取,需要进行页面解析,解析的方法有以下 ...

随机推荐

  1. linus系统下使用hexo搭建个人博客

    最近在搭建自己的个人网站,准备在上面内置一个博客模块,把之前或者以后杂七杂八的总结都放里边. 大致查了一下在WordPress和Hexo间选用了Hexo,体量较小一点. 先贴上Hexo的官方文档:He ...

  2. Linux文本处理工具

    Linux文本处理工具 Linux中熟练的使用文本处理工具非常的重要, 因为Linux在设计的时候是采用一切皆文件的哲学的, 甚至连计算机中的配置也都使用伪文件系统来表示, 要查询里面的内容就是对文件 ...

  3. 一个不错的架构图:基于SpringCloud的微服务项目

    https://github.com/hanlin5566/HJ-MicroService

  4. C#-01.语法基础

    a. 语法基础 i. 命名空间(namespace):是 C# 中组织代码的方式,用来声明命名空间 . 语法:namespace 命名空间名称{ //命名空间的声明 } . 作用:可以把紧密相关的一些 ...

  5. jquery 获取easyui combobox选中的值、赋值

    jquery easyui combobox 控件支持单选和多选 1.获取选中的值 $('#comboboxlist').combobox('getValue');  //单选时 $('#combob ...

  6. 如何恢复sqlserver误删除的数据(摘)

    一.借助第三方工具 1.sqlserver2005: Log Explorer http://www.cnblogs.com/whitney/archive/2008/08/22/1273879.ht ...

  7. 动态网页开发jsp

    1.动态网页的优势?    ①交互性:即网页会根据用户的要求和选择而动态改变和显示内容.    ③自动更新:即无需改变页面代码,便会自动生成新的页面内容.    ④随机性:即当不同的时间.不同的人访问 ...

  8. 对SNMP4J的一些封装

    SNMP4J是一个开源的,用Java实现的snmp协议.其中提供了一下API,在这些API上面封装了一些方法,比如SNMP的get-request请求,get-next-request请求等 如果不了 ...

  9. H5左滑删除JS插件

    <script type="text/javascript"> /** * zepto插件:向左滑动删除动效 * 使用方法:$('.itemWipe').touchWi ...

  10. XMLHttpRequest.responseType

    "arraybuffer" "blob" "document" "json" "text"