文档章节

First Blood for Android之HttpClient网络编程

观望蓝
 观望蓝
发布于 2016/02/27 13:04
字数 712
阅读 6
收藏 0
点赞 1
评论 0

重要知识点:
一、使用HttpClient步骤:
1.HttpClient是一个接口,一般情况下建立一个DefaultHttpClient的实例:
HttpClient httpClient=new DefaultHttpClient();
2.如果向服务器请求数据,则用建立HttpGet发起get请求:
HttpGet httpGet=new HttpGet(url);注:rul为String类型,内容是访问地址
3.再把httpGet对象传入httpClient的execute方法即可:
httpClient.execute(httpGet);

4.如果发起的post请求,则需要建立一个HttpPost的实例:
HttpPost httpPost=new HttpPost(url);
相应地,向服务器提交的数据,通常放入NameValuePair集合的实例中,再将它封装进UrlEncodeFormEntity中,然后调用httpPost.setEntity()方法:
List<NameValuePair>params =new ArrayList<NameValuePair();
通常地,会将Json转换为request参数
params.add(new BasicNameValuePair("request", params1.toString()));
UrlEncodedFormEntity urlEncodedFormEntity= new UrlEncodedFormEntity(params, HTTP.UTF_8);
httpPost.setEntity(urlEncodeFormEntity);

5.再将httpPost传入httpClient.execute()方法中:
HttpResponse httpResponse=httpClient.execute(httpPost)
通常地,当httpClient想服务器提交post后,则会返回一个HttpResponse实例,httpResponse对象中存储服务器返回的数据。

6.通过判断if(httpResponse.getStatusLine().getStatusCode()==200){
//请求和响应都成功了
HttpEntity entity=httpResponse.getEntity();
String response=EntityUtils.toString(entity);参考资料(第一行代码)
}

二、访问网络的技巧:
1.网络访问经常需要用到。因此,可将访问网络的方法提取到工具类中,以便重用。
2.网络访问是耗时操作,因此需要开启子线程进行。另外如果开启子线程访问网络,并想要得到服务器返回的数据,定义一个监听的回调方法,将数据返回。

3.如果需要根据返回数据更新UI界面,则需要在回调方法中调用handler.sendMessage()通知UI线程更新界面,切忌在子线程更新会产生阻塞错误。

附:HttpUtil代码:
1.HttpUtil类

public class HttpUtil {
/**
 * <p>网络访问服务,向服务器请求登陆
 * @param address:请求地址;
 * @param HttpCallbackListener:网络访问监听引用;
 * @param account:账号
 * @param password:密码
 * */
 public static void  postHttpJson(final String address,final HttpCallbackListener listener,final String account,final String password){
  
  new Thread(new Runnable() {
   
   @Override
   public void run() {
    // TODO Auto-generated method stub
    try {
     HttpClient httpClient=new DefaultHttpClient();
     HttpPost httpPost=new HttpPost(address);
     JSONObject params1 = JsonBuilder.jsonData(account, password);    
     ArrayList<NameValuePair> params = new ArrayList<NameValuePair>();
     params.add(new BasicNameValuePair("request", params1.toString()));
     UrlEncodedFormEntity urlEncodedFormEntity= new UrlEncodedFormEntity(params, HTTP.UTF_8);

     
     Log.i("json", params1.toString());
     httpPost.setEntity(urlEncodedFormEntity);
     HttpResponse httpResponse=httpClient.execute(httpPost);
     if (httpResponse.getStatusLine().getStatusCode()==200) {
      HttpEntity entity=httpResponse.getEntity();
      String response=EntityUtils.toString(entity);
      
      if (listener!=null) {
       listener.onFinish(response);
       Log.i("response", response);
      }
          
     }
    } catch (UnsupportedEncodingException e) {
     
     e.printStackTrace();
    } catch (ClientProtocolException e) {
     if (listener!=null) {
      listener.onError(e);
     }
     
    } catch (JSONException e) {
     
     e.printStackTrace();
    } catch (IOException e) {
   
     e.printStackTrace();
    }
   
   }

   
  }).start();
 }
 
}

2.HttpCallbackListener:

//写了一个接口,定义回调约定:onFinish()、onError(),将HttpCallbackListener的对象引用以参数的方式传递到HttpUtil的静态方法postHttpJson()中,当用户发起网络访问请求调用postHttpJson()时,将会实现HttpCallbackListener接口的匿名内部类对象,调用接口定义的好回调方法。

public interface HttpCallbackListener {
 void onFinish(String response);
 void onError(Exception exception);
}

 

© 著作权归作者所有

共有 人打赏支持
观望蓝
粉丝 0
博文 3
码字总数 1122
作品 0
广州
HttpClient和HttpURLConnection的区别

Android 提供两个HTTP客户端,分别是HttpURLConnection客户端和Apache的HttpClient,android的AndroidHttpClient是对HttpClient的实现。这两个HTTP客户端都支持HTTPS协议、流媒体的上传和下载...

Callen
2015/08/09
0
0
Android 浅谈HttpClient工具类

在Android开发中我们经常会用到网络连接功能与服务器进行数据的交互,为此Android的SDK提供了Apache的HttpClient来方便我们使用各种Http服务。你可以把HttpClient想象成一个浏览器,通过它的...

Jonson
2013/07/25
0
3
Android也架构之三:简单工厂模式优化网络请求

很悲催,我们在《Android也架构之二:单例模式访问网络》 用httpConnect的方式去访问网络,而且能够正常获取数据了,可是老板能,技术出生,他要求我重新用httpClient去获取获取网络数据,童...

理工男海哥
2012/08/21
0
0
android使用HttpClient和URLConnection获取网页内容

今天开始android网络编程,平时做的android整机开发这块,基本上不大需要接触android网络变成这块知识,还是得熟悉熟悉。 本文要讲的是使用URLConnection对象和HttpClient组件访问网络以及获...

幸子
2014/03/27
0
1
android中网络操作使用总结(http)

Android是作为智能手机的操作系统,我们开发的应用,大多数也都需要连接网络,通过网络发送数据、获取数据,因此作为一个应用开发者必须熟悉怎么进行网络访问与连接。通常android中进行网络连...

码农明明
2014/05/22
0
6
android编写访问http的代码

android使用apache httpclient项目实现手机作为http客户端的调用。android使用的是最新的httpclient 4.0版本,网上很多国内的文档是3.x的,调用方式不一样。 httpclient有一个官方教程,见:...

xiahuawuyu
2012/08/06
0
0
Android 使用自带的HttpClient进行https请求出现403的解决过程记录

出现的过程 最近在用程序模拟一个web站的https登录,然后进行一些后续操作的小玩意。先使用java程序写测试代码,测试通过移植到android。 java基于httpclient-4.3.1.jar开发。 android端使用...

atearsan
2014/03/05
0
1
android下的android.os.StrictMode$AndroidBlockGuardPo

try { URL url = new URL(path); //path图片的网络地址 HttpURLConnection httpURLConnection = (HttpURLConnection) url.openConnection(); if(httpURLConnection.getResponseCode() == Ht......

Carl_
2015/01/07
0
0
使用单例模式实现自己的HttpClient工具类

引子 在Android开发中我们经常会用到网络连接功能与服务器进行数据的交互,为此Android的SDK提供了Apache的HttpClient来方便我们使用各种Http服务。你可以把HttpClient想象成一个浏览器,通过...

moz1q1
2015/04/01
0
0
Android的三种网络通讯方式详解

1.标准Java接口 java.net.*提供与联网有关的类,包括流、数据包套接字(socket)、Internet协议、常见Http处理等。比如:创建URL,以及URLConnection/HttpURLConnection对象、设置链接参数、链...

茗香墨语
2015/11/10
0
20

没有更多内容

加载失败,请刷新页面

加载更多

下一页

rabbitmq学习记录(五)交换机Exchange-fanout

之前学习的都是一条消息发给一个消费者,下面开始记录如何把一条信息发给多个消费者 这边我们用到了交换机Exchange 交换机模式:fanout 模式特点:生产者把消息发送给Exchange之后,Exchang...

人觉非常君
21分钟前
0
0
sqoop导入数据到Base并同步hive与impala

使用Sqoop从MySQL导入数据到Hive和HBase 及近期感悟 基础环境 Sqool和Hive、HBase简介 Sqoop Hive HBase 测试Sqoop 使用Sqoop从MySQL导入数据到Hive 使用复杂SQL 调整Hive数据类型 不断更新 ...

hblt-j
26分钟前
0
0
Dart 服务端开发 文件上传

clent端使用angular组件 upload_component.html form id="myForm" method="POST" enctype="multipart/form-data"> <input type="file" name="fileData"> <!-- file field --></form>......

scooplol
26分钟前
0
0
apache和tomcat同时开启,乱码问题

tomcat和apache同时开启,会走apache的转发,执行的是AJP/1.3协议。所以在tomcat的配置文件server中, <Connector port="8009" protocol="AJP/1.3" redirectPort="8443" useBodyEncodingForU......

Kefy
43分钟前
0
0
使用ssh-keygen和ssh-copy-id三步实现SSH无密码登录 和ssh常用命令

ssh-keygen 产生公钥与私钥对. ssh-copy-id 将本机的公钥复制到远程机器的authorized_keys文件中,ssh-copy-id也能让你有到远程机器的home, ~./ssh , 和 ~/.ssh/authorized_keys的权利 第一步...

xtof
58分钟前
0
0
orcale 查询表结构

SELECT t.table_name, t.colUMN_NAME, t.DATA_TYPE || '(' || t.DATA_LENGTH || ')', t1.COMMENTS FROM User_Tab_Cols t, User_Col_Comments t1WHERE t.table_name......

wertwang
今天
0
0
Java 之 反射

反射,剖析 Java类 中的 各个组成部分,映射成 一个个 Java对象,多用于 框架和组件,写出复用性高的通用程序。 测试类代码如下: class Person { private String name; public St...

绝世武神
今天
0
0
华为nova3超级慢动作酷玩抖音,没有办法我就是这么强大

华为nova3超级慢动作酷玩抖音,没有办法我就是这么强大!华为nova3超级慢动作酷玩抖音,没有办法我就是这么强大! 在华为最新发布的nova 3手机上,抖音通过华为himedia SDK集成了60fps、超级...

华为终端开放实验室
今天
0
0
多 SSH Key 实现同一台服务器部署多 Git 仓库

本文以以下需求为背景,介绍详细的做法: 需在同一台服务器同时部署两个不同的 Github 仓库(对 Bitbucket 等 git 服务同样适用) root 用户可在远程登录 SSH 后附上预期的 SSH Key 进行 gi...

yeahlife
今天
0
0
003. es6数值的扩展

一、普通扩展 Number 方法,将字符串、数值转为十进制 : Number('0b111') Number.isFinite() 用来检查一个数值是否为有限的:Number.isFinite(15) Number.isNan() 用来检查一个值是否为NaN N...

秋季长青
今天
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部