Android Httpclient

我想从android到spring控制器上传图片。 我已经使用rest api call(httpclient)连接了android和spring我的代码是:

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 nameValuePairs = new ArrayList(); 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中遇到错误

 Caused by: java.lang.NoSuchMethodError: org.apache.http.entity.ContentType.create 

我的android依赖项:

 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为httpmimehttpclient-android 。 尝试使用httpmime 4.3.6

的NoSuchMethodError

如果应用程序试图调用类的指定方法(静态或实例),并且该类不再具有该方法的定义,则抛出该exception。 通常,编译器会捕获此错误; 如果类的定义不兼容地更改,则此错误只能在运行时发生。

您应该使用两者的不兼容版本。

  compile ('org.apache.httpcomponents:httpmime:4.5.2') { exclude module: 'httpclient' } compile 'org.apache.httpcomponents:httpclient:4.5' 

我也像你一样做,然后我刚刚使用相同的库版本,它工作,

我不知道如何,但下面的代码解决了我的问题

 compile( 'org.apache.httpcomponents:httpmime:4.3.5') { exclude module: 'httpclient' } compile 'org.apache.httpcomponents:httpclient-android:4.3.5'