开发者社区 问答 正文

android的自带的httpClient(4.x) 怎么上传文件?报错

public static String post(AppContext appContext, String url, Map<String, String> params, File file)
			throws Exception{
		String userAgent = getUserAgent(appContext);
		String cookie = getCookie(appContext);


		MultipartEntityBuilder builder = MultipartEntityBuilder.create();
		builder.setMode(HttpMultipartMode.BROWSER_COMPATIBLE);
		
		if(params != null){
			for(String key : params.keySet()){			//添加所有的文本字段
				builder.addTextBody(key, params.get(key));
			}
		}

		if(file != null){
			FileBody fileBody = new FileBody(file);
			builder.addPart("face", fileBody);
		}
		
		HttpClient httpClient= getHttpClient();
		HttpPost httpPost = getHttpPost(url, cookie, userAgent);
		HttpEntity entity = builder.build();
		httpPost.setEntity(entity);
		
		try {
			HttpResponse response = httpClient.execute(httpPost);
			if (response.getStatusLine().getStatusCode() == HttpStatus.SC_OK){
				String responseBody = EntityUtils.toString(response.getEntity());
				return responseBody;
			} else{
				throw new Exception("服务器错误");
			}
		} catch (IOException e) {
			e.printStackTrace();
			return null;
		}
		
	}


现在android自带的httpClient版本是4.X的,我看了开源中国的源码。里面很多的类都已经没了。

上网搜了大部分都是基于完整版的,android自带的好像没有一些类

上面的这段代码,运行时报错

02-16 18:58:33.923: E/AndroidRuntime(6813): FATAL EXCEPTION: Thread-4485
02-16 18:58:33.923: E/AndroidRuntime(6813): java.lang.NoClassDefFoundError: org.apache.http.entity.ContentType
02-16 18:58:33.923: E/AndroidRuntime(6813): at org.apache.http.entity.mime.MultipartEntityBuilder.addTextBody(MultipartEntityBuilder.java:148)
02-16 18:58:33.923: E/AndroidRuntime(6813): at com.gojob.app.net.NetworkVisitor.post(NetworkVisitor.java:219)
02-16 18:58:33.923: E/AndroidRuntime(6813): at com.gojob.app.net.NetworkVisitor.login(NetworkVisitor.java:150)
02-16 18:58:33.923: E/AndroidRuntime(6813): at com.gojob.app.fragment.LoginFragment$1$1.run(LoginFragment.java:68)

于是,我把httpmime.jar 加进来。他还需要httpcore.jar.

但是还是报错

02-16 18:37:10.617: E/AndroidRuntime(23166): FATAL EXCEPTION: Thread-5712
02-16 18:37:10.617: E/AndroidRuntime(23166): java.lang.NoSuchFieldError: org.apache.http.message.BasicHeaderValueFormatter.INSTANCE
02-16 18:37:10.617: E/AndroidRuntime(23166): at org.apache.http.entity.ContentType.toString(ContentType.java:153)
02-16 18:37:10.617: E/AndroidRuntime(23166): at org.apache.http.entity.mime.MultipartFormEntity.<init>(MultipartFormEntity.java:52)
02-16 18:37:10.617: E/AndroidRuntime(23166): at org.apache.http.entity.mime.MultipartEntityBuilder.buildEntity(MultipartEntityBuilder.java:226)
02-16 18:37:10.617: E/AndroidRuntime(23166): at org.apache.http.entity.mime.MultipartEntityBuilder.build(MultipartEntityBuilder.java:230)
02-16 18:37:10.617: E/AndroidRuntime(23166): at com.gojob.app.net.NetworkVisitor.post(NetworkVisitor.java:235)
02-16 18:37:10.617: E/AndroidRuntime(23166): at com.gojob.app.net.NetworkVisitor.regist(NetworkVisitor.java:205)
02-16 18:37:10.617: E/AndroidRuntime(23166): at com.gojob.app.fragment.RegistFragment$1$1.run(RegistFragment.java:74)

我上网搜索了一下,是因为android自带的和我加的冲突了。请问怎么解决???

展开
收起
爱吃鱼的程序员 2020-06-14 17:47:15 791 分享 版权
1 条回答
写回答
取消 提交回答
  • https://developer.aliyun.com/profile/5yerqm5bn5yqg?spm=a2c6h.12873639.0.0.6eae304abcjaIB

    Android没有httpcientmime的jar包,手动添加就ok加了还不行。还缺个http-core啥的。但是一加上去就是异常。你可以密我,我自己编译的jar包,发给你。我也碰到这个问题了,能也发我一个jar包吗?andlive@126.comdong.chun.xu@163.com谢谢大哥<divclass='ref'>

    引用来自“mgic”的评论

    你可以密我,我自己编译的jar包,发给你。<divclass='ref'>

    引用来自“mgic”的评论

    你可以密我,我自己编译的jar包,发给你。<spanstyle="color:#444444;font-family:Verdana,sans-serif,宋体;font-size:14px;line-height:normal;background-color:#FFFFFF;">我也碰到这个问题了,能也发我一个jar包吗?andlive@126.com已发,发送地址是pingia@163.com。请查收收到了,谢谢,但是我使用的时候,提示类重复定义?
    Unabletoexecutedex:MultipledexfilesdefineLorg/apache/http/Consts;
    ConversiontoDalvikformatfailed:Unabletoexecutedex:MultipledexfilesdefineLorg/apache/http/Consts;
    你们是如何解决这个问题的?
    大兄弟,解决了吗? lz发我一个包 2547429641@qq.com楼主,你好,你的问题解决了吗?我也遇到这样的问题,能否发我一份jar,807800805@qq.com 万分感谢

    2020-06-14 17:47:33
    赞同 展开评论