【问题标题】:Android Httpclient [NoSuchMethodError:org.apache.http.entity.ContentType.create]Android Httpclient [NoSuchMethodError:org.apache.http.entity.ContentType.create]
【发布时间】:2015-04-22 05:28:38
【问题描述】:

我想将图像从 android 上传到 spring 控制器。 我已经使用rest api调用(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<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();
    }

个人资料图片是文件。 并使用多方上传 但是我在android中遇到了错误

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

我的安卓依赖:

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)

 

【问题讨论】:

标签: java android spring


【解决方案1】:

看起来您为 httpmimehttpclient-android 使用了不兼容的 jar。尝试使用httpmime的版本4.3.6

【讨论】:

  • 现在我检查一下。感谢@Jens 的帮助
  • 我正在更改依赖项编译组:'org.apache.httpcomponents',名称:'httpclient-android',版本:'4.3.5' 编译'org.apache.httpcomponents:httpmime:4.3。 5'
  • 其已修复但弹簧控制器显示错误消息:请求不是多部分文件..
  • @nmkkannan 参考此stackoverflow.com/a/18292567/1793718 将标头添加到您的请求并将enctype="multipart/form-data" 添加到您的表单
  • @Jens 感谢您的回答,它救了我。工作完全正常。
【解决方案2】:

我也和你一样,然后我刚刚使用了相同的库版本并且它工作了,

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

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

【讨论】:

    【解决方案3】:

    NoSuchMethodError

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-03-30
      • 1970-01-01
      • 2012-11-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多