使用 org.apache.http.client.HttpClient;

一开始从官网下载HttpClient 4.5:http://hc.apache.org/downloads.cgi ,解压之后添加到项目,添加 httppost.setEntity(entity) 后,一执行 httpclient.execute(post) 就报错,不添加还能正常Post。

查了不少 stackoverflow 的帖子,测试了无数方法,终于在十二小时后,发现了答案:http://stackoverflow.com/questions/29788479/android-httpclient-nosuchmethoderrororg-apache-http-entity-contenttype-create

1、要用 httpclient-android-4.3.5.1.jar ,而不是 httpclient-4.5.jar ,重点是 android ,不是版本;

2、要用 httpmime-4.3.6.jar ,而不是最新的 httpmime-4.5.jar 。上面 stackoverflow 的帖子说了,httpmime 和 httpclient-android 存在不兼容问题。

3、MultipartEntityBuilder ,而不是 MultipartEntity 。

代码参考 开源软件凡信:http://www.imgeek.org/forum.php?mod=viewthread&tid=763&extra=page%3D1

new Thread() {

        @SuppressWarnings("rawtypes")
public void run() {
HttpClient client = new DefaultHttpClient(); MultipartEntityBuilder entity = MultipartEntityBuilder.create()
.setMode(HttpMultipartMode.BROWSER_COMPATIBLE); Set keys = map.keySet();
if (keys != null) {
Iterator iterator = keys.iterator();
while (iterator.hasNext()) {
String key = (String) iterator.next();
String value = (String) map.get(key);
if (key.equals("file")) {
File file = new File(value);
entity.addPart(key, new FileBody(file));
} else { try {
entity.addPart(key, new StringBody(value,
Charset.forName("UTF-8")));
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
}
} }
// 如果包含数组,要把包含的数组放进去,项目目前只有members这个数组,所有固定键值,为了更灵活
// 可以将传入自定义的键名......
if (has_Array) {
for (int i = 0; i < members.size(); i++) { try {
entity.addPart(
"members[]",
new StringBody(members.get(i), Charset
.forName("UTF-8")));
} catch (UnsupportedEncodingException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
} client.getParams().setParameter(
CoreConnectionPNames.CONNECTION_TIMEOUT, 30000);
// 请求超时
client.getParams().setParameter(
CoreConnectionPNames.SO_TIMEOUT, 30000);
/*HttpPost post = new HttpPost(url);
post.setEntity(entity);*/ HttpPost post = new HttpPost(url);
post.setEntity(entity.build()); Log.d("LoadDataFromServer","2"); StringBuilder builder = new StringBuilder();
try {
Log.d("LoadDataFromServer","3");
HttpResponse response = client.execute(post);
Log.d("LoadDataFromServer","4"); if (response.getStatusLine().getStatusCode() == 200) {
BufferedReader reader = new BufferedReader(
new InputStreamReader(response.getEntity()
.getContent(), Charset.forName("UTF-8")));
for (String s = reader.readLine(); s != null; s = reader
.readLine()) {
builder.append(s);
}
String builder_BOM = jsonTokener(builder.toString());
System.out.println("返回数据是------->>>>>>>>"
+ builder.toString());
try {
JSONObject jsonObject = new JSONObject();
jsonObject = JSONObject.parseObject(builder_BOM);
Message msg = new Message();
msg.what = 111;
msg.obj = jsonObject;
handler.sendMessage(msg);
} catch (JSONException e) {
e.printStackTrace();
} } } catch (ClientProtocolException e) {
e.printStackTrace(); } catch (IOException e) {
e.printStackTrace();
} }
}.start();

Android开发-网络通信1的更多相关文章

  1. Android开发-网络通信2

    调试了三种通信方法:HttpClient.AsyncHttpClient 和 Volley . HttpClient 测试代码[1]: public class HttpUtil { public s ...

  2. 学Android开发,入门语言java知识点

    学Android开发,入门语言java知识点 Android是一种以Linux为基础的开源码操作系统,主要使用于便携设备,而linux是用c语言和少量汇编语言写成的,如果你想研究Android,就去学 ...

  3. Android开发学习清单

    目录: 第1章 Android应用与开发环境1.1 Android的发展和历史1.1.1 Android的发展和简介1.1.2 Android平台架构及特性1.2 搭建Android开发环境1.2.1 ...

  4. Android开发学习——搭建开发环境

    在学校开课学习了android的一些简单的UI组件,布局,四大组件学习了2个,数据存储及网络通信,都是一些简单的概念,入门而已.许多东西需要自己去学习. 学习一下 Android开发环境的搭建,两种方 ...

  5. 【Android开发资料分享】自己整理的Android开发资料,非常全面

    学习Android以来,不知不觉中收集了大量非常优秀的Android开发资料,一直没有系统的整理,最近抽时间把收藏夹中的资料做了一下整理,现在分享给大家,希望能够帮助到需要的人.这份资料我还会不断的更 ...

  6. [转]【eoeAndroid索引】史上最牛最全android开发知识汇总

    一.开发环境搭建 (已完成) 负责人:kris 状态:已完成 所整理标签为:搭建 SDK JDK NDK Eclipse ADT 模拟器 AVD 调试器(DEBUG) DDMS 测试 日志 Logca ...

  7. Android开发系列之学习路线图

    通过前面的3篇博客已经简单的介绍了Android开发的过程并写了一个简单的demo,了解了Android开发的环境以及一些背景知识. 接下来这篇博客不打算继续学习Android开发的细节,先停一下,明 ...

  8. 《Android开发艺术探索》读书笔记 (2) 第2章 IPC机制

    2.1 Android IPC简介 (1)任何一个操作系统都需要有相应的IPC机制,Linux上可以通过命名通道.共享内存.信号量等来进行进程间通信.Android系统不仅可以使用了Binder机制来 ...

  9. Android 开发技术流程

    1.网络连接通信 HttpClient 类通信(见<第一行代码> 郭霖2014.8月第一版P385) Android Asynchronous Http Client  (见  http: ...

随机推荐

  1. 你没见过的python语法

    目录: 1.不一样的列表 2.改变type中的规则,创建类:类属性大写 3.%s字串格式化,不用元组用字典 4.没有参数抛出异常 5.字符串签名加f 格式化字符串 6.attr库 1.不一样的列表 l ...

  2. 注册表REG文件编写大全

    Windows 中的注册表文件( system.dat 和 user.dat )是 Windows 的核心数据库,因此,对 Windows 来说是非常重要的. 通过修改注册表文件中的数据,可以达到优化 ...

  3. 单舵轮(叉车)AGV里程计数据解算

    单舵轮(叉车)AGV里程计数据解算 2016-07 单舵轮AGV,一般包含一个驱动轮和两个从动轮,驱动轮是同时具备行走和转向两个功能的舵轮,因此,单舵轮AGV的运动学自由度为2个.舵轮线速度V1,舵轮 ...

  4. centos6.5安装cmake-gui

    首先下载cmake(官网,2.8.12版本) 解压 运行 ./bootstrap --qt-gui make make install 完成后,在/usr/local/bin目录下会出现cmake-g ...

  5. django+celery 实现定时任务

    利用 celery 实现定时任务 celery支持定时任务,设定好任务的执行时间,celery就会定时自动帮你执行, 这个定时任务模块叫celery beat Celery安装 由于celery 4. ...

  6. 《mysql必知必会》读书笔记--游标的使用

    游标的使用 MySQL中游标只能用于存储过程 创建游标 CREATE PROCEDURE processorders() BEGIN DECLARE ordernumbers CURSOR FOR S ...

  7. 清晰讲解LSB、MSB和大小端模式及网络字节序

    时隔一个月又回到了博客园写文章,很开心O(∩_∩)O~~ 今天在做需求的涉及到一个固件版本的概念,其中固件组的人谈到了版本号从MSB到LSB排列,检索查阅后将所得整理如下. MSB.LSB? MSB( ...

  8. curl 命令返回json结构human readable

    在curl命令后面添加 | python -m json.tool 不想显示curl的统计信息,添加 -s参数 例: curl https://news-at.zhihu.com/api/4/news ...

  9. RabbitMQ 高级指南

    1 RabbitMQ 简介 1.1 介绍 RabbitMQ 是一个由 erlang 开发的基于 AMQP(Advanced Message Queue)协议的开源实现.用于在分布式系统中存储转发消息, ...

  10. OpenStack、KVM、VMWare和Docker

    一.虚拟化 1.什么是虚拟化 虚拟化,是指通过虚拟化技术将一台计算机虚拟为多台逻辑计算机.在一台计算机上同时运行多个逻辑计算机,每个逻辑计算机可运行不同的操作系统,并且应用程序都可以在相互独立的空间内 ...