使用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. ZOJ 1610——Count the Colors——————【线段树区间替换、求不同颜色区间段数】

    Count the Colors Time Limit:2000MS     Memory Limit:65536KB     64bit IO Format:%lld & %llu Subm ...

  2. 对while;do while;for三种循环语句的理解与区分。

    while:先判断表达式的值,在表达式值为真的情况下执行循环语句,直到表达式值为假结束循环: while(循环条件) { 循环体. } do-while:先执行循环体语句一次,再判别表达式的值,在表达 ...

  3. [Linq To Sql]解决join时的Collation冲突

    背景 现在两表 A:

  4. Thrift笔记(三)--Thrift框架通信源码分析

    Thrift 客户端调用RPC的Demo public static void main(String[] args) throws Exception { TTransport transport ...

  5. ef linq 查询某时间段内数据 踩的坑

    var now = DateTime.Now;var list =db.Jinbi_TypeLimit.Where(x => x.IsAvailable && x.JinbiTy ...

  6. 自动化运维与Saltstack

    一.自动化运维介绍 1.自动化运维产生背景   传统的IT运维是将数据中心中的网络设备.服务器.数据库.中间件.存储.虚拟化.硬件等资源进行统一监控,当资源出现告警时,运维人员通过工具或者基于经验进行 ...

  7. js数组插入指定位置元素,删除指定位置元素,查找指定位置元素算法

    将元素x插入到顺序表L(数组)的第i个数据元素之前 function InsertSeqlist(L, x, i) { // 将元素x插入到顺序表L的第i个数据元素之前 if(L.length == ...

  8. Cloud

    Cloud = Data + Routing + Computing + Storage

  9. Android—PopupWindow的简单使用

    PopupWindow 是一个可以显示在当前 Activity 之上的浮动容器,这个Demo要实现的功能是,点击布局中的两个按钮,进而控制PopupWindow的显示与消失,代码中有详细的注释首先看一 ...

  10. css 字体样式设置

    css字体样式(Font Style),属性 时间:2014-05-08 21:49 来源:我爱学习网 | 作者:我爱学习网 | 本文已影响 68353 人   css字体样式(Font Style) ...