Android Httpclient [NoSuchMethodError:org.apache.http.entity.ContentType.create]
问题描述:
我想从android上传图像到spring控制器。
我已经使用rest api调用(httpclient)连接android和
我的代码是:
I want upload image from android to spring controller. I already connected android with spring using rest api call (httpclient) My code is :
final String jsonUserMo = gson.toJson(userMO);
final StringBuilder contactLists = new StringBuilder();
HttpClient client = new DefaultHttpClient();
HttpConnectionParams.setConnectionTimeout(client.getParams(), 10000); // Timeout
try {
MultipartEntityBuilder builder = MultipartEntityBuilder.create();
builder.setMode(HttpMultipartMode.BROWSER_COMPATIBLE);
FileBody profileFile = new FileBody(profileImage);
builder.addPart("uploadImg", profileFile);
HttpEntity entity = builder.build();
List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>();
nameValuePairs.add(new BasicNameValuePair("userMO", jsonUserMo));
HttpPost post = new HttpPost(Constants.ROOTURL+"/media/uploadUserImage");
post.setEntity(entity);
post.setEntity(new UrlEncodedFormEntity(nameValuePairs));
Log.i("Ringee",post.toString());
HttpResponse response = client.execute(post);
BufferedReader rd = new BufferedReader(new InputStreamReader(response.getEntity().getContent()));
contactLists.append(rd.readLine());
} catch (Exception e) {
e.printStackTrace();
}
个人资料图片是文件。
及其上传使用mutipartentity
但是我在android中遇到错误
profile image is file. and its upload using mutipartentity But i got error in android
Caused by: java.lang.NoSuchMethodError: org.apache.http.entity.ContentType.create
我的android依赖项:
My android dependencies :
dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
compile 'com.android.support:appcompat-v7:21.0.3'
compile 'com.google.android.gms:play-services:6.1.11'
compile ('org.apache.httpcomponents:httpmime:4.4.1') {
exclude module: 'httpclient'
}
compile 'org.apache.httpcomponents:httpclient-android:4.3.5'
}
错误:
04-22 10:35:16.398 13604-14290/com.ringee.app E/AndroidRuntime﹕ FATAL EXCEPTION: AsyncTask #2
Process: com.ringee.app, PID: 13604
java.lang.RuntimeException: An error occured while executing doInBackground()
at android.os.AsyncTask$3.done(AsyncTask.java:300)
at java.util.concurrent.FutureTask.finishCompletion(FutureTask.java:355)
at java.util.concurrent.FutureTask.setException(FutureTask.java:222)
at java.util.concurrent.FutureTask.run(FutureTask.java:242)
at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:231)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)
at java.lang.Thread.run(Thread.java:841)
Caused by: java.lang.NoSuchMethodError: org.apache.http.entity.ContentType.create
at org.apache.http.entity.mime.MultipartEntityBuilder.buildEntity(MultipartEntityBuilder.java:209)
at org.apache.http.entity.mime.MultipartEntityBuilder.build(MultipartEntityBuilder.java:230)
at com.ringee.app.delegates.MediaDelegates.uploadImageToServer(MediaDelegates.java:51)
at com.ringee.app.ImageUploadActivity$1$1.doInBackground(ImageUploadActivity.java:85)
at com.ringee.app.ImageUploadActivity$1$1.doInBackground(ImageUploadActivity.java:82)
at android.os.AsyncTask$2.call(AsyncTask.java:288)
at java.util.concurrent.FutureTask.run(FutureTask.java:237
at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:231)
答
看起来你使用不兼容的jar来代替 httpmime
和 httpclient-android
。尝试使用版本 4.3.6
httpmime
Looks like you use incompatible jar's for httpmime
and httpclient-android
. Try to use version 4.3.6
of httpmime