使用 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. SSO详解(转)

    转自:http://www.cnblogs.com/EzrealLiu/p/5559255.html 1. 摘要 SSO这一概念由来已久,网络上对应不同场景的成熟SSO解决方案比比皆是,从简单到复杂, ...

  2. Python:解析properties文件

    在项目中遇到解析properties的情况,而Python中正好没有解析properties文件的现成模块,于是从网上找到了这个脚本,有一些小地方修改了一下 原博客: Python读写properti ...

  3. Spark踩坑记:Spark Streaming+kafka应用及调优

    前言 在WeTest舆情项目中,需要对每天千万级的游戏评论信息进行词频统计,在生产者一端,我们将数据按照每天的拉取时间存入了Kafka当中,而在消费者一端,我们利用了spark streaming从k ...

  4. confluence安装、破解+MariaDB驱动、汉化

    下载所需文件:http://fansik.edusaas.com/confluence/安装包:atlassian-confluence-5.8.10-x64.bin 汉化包:Confluence-5 ...

  5. 查看Oracle latch _spin_count默认值

    查看Oracle latch  _spin_count默认值 SELECT X.KSPPINM NAME, Y.KSPFTCTXVL VALUE, Y.KSPFTCTXDF ISDEFAULT FRO ...

  6. 自动填写IE的网页的输入框的内容

    procedure TForm1.PutData; var ShellWindow: IShellWindows; nCount: integer; spDisp: IDispatch; i,j,X: ...

  7. 跨域问题-jsonp

    前端同源策略并不会拦截静态资源请求,那么就将接口伪装成资源,然后后端配合返回一个前端预定义的方法调用,将返回值放入调用该函数的形参即可 <!DOCTYPE html> <html l ...

  8. 2017 Multi-University Training Contest - Team 4 hdu6069 Counting Divisors

    地址:http://acm.split.hdu.edu.cn/showproblem.php?pid=6069 题目: Counting Divisors Time Limit: 10000/5000 ...

  9. hihocoder1478 水陆距离

    地址:http://hihocoder.com/problemset/problem/1478 题目: 水陆距离 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 给定一个 ...

  10. hihocoder1477 闰秒

    地址:http://hihocoder.com/problemset/problem/1477 题目: 闰秒 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 计算机系统中 ...