【问题标题】:Error in adding file to MultipartEntityBuilder in android在android中将文件添加到MultipartEntityBuilder时出错
【发布时间】:2016-05-02 06:24:45
【问题描述】:

在我的 Android 项目中,我使用 MultipartEntityBuilder 使用 AsyncTask 将文件上传到后端。我在我的项目中使用 httpmime-4.5.2。我在上传 AsyncTask 时的 doInBackground 方法如下。

@Override
protected String doInBackground(String... params) {

            try {
                String serverLoaction = params[0];
                String filePath = params[1];

                HttpClient httpClient = new DefaultHttpClient();
                HttpContext localContext = new BasicHttpContext();
                HttpPost httpPost = new HttpPost(serverLoaction);

                MultipartEntityBuilder entity = MultipartEntityBuilder.create();
                entity.setMode(HttpMultipartMode.BROWSER_COMPATIBLE);

                FileBody fileBody = new FileBody(new File(filePath));
                entity.addPart("file", fileBody);
                HttpEntity entity_ = entity.build();
                httpPost.setEntity(entity_);

                HttpResponse response = httpClient.execute(httpPost,
                        localContext);

                BufferedReader reader = new BufferedReader(
                        new InputStreamReader(
                                response.getEntity().getContent(), "UTF-8"));

                String sResponse = reader.readLine();
                return sResponse;

            } catch (Exception e) {
                if (dialog.isShowing())
                    dialog.dismiss();
                Toast.makeText(getApplicationContext(), "Error in downloading image", Toast.LENGTH_LONG).show();
                Log.e(e.getClass().getName(), e.getMessage(), e);
                return null;
            }
        }

但是当 AsyncTask 正在执行时,它给了我以下错误。

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.NoClassDefFoundError: org.apache.http.entity.ContentType
at org.apache.http.entity.mime.content.FileBody.<init>(FileBody.java:89)
at com.marpak.livefarmerpro.ui.farm_activity.AddCropMonitors$UploadFileTask.doInBackground(AddMonitors.java:1912)
at com.marpak.livefarmerpro.ui.farm_activity.AddCropMonitors$UploadFileTask.doInBackground(AddMonitors.java:1884)
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) 
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)

所以这段代码有什么问题。我怎样才能解决这个问题。谢谢和问候。

【问题讨论】:

  • 由:java.lang.NoClassDefFoundError 引起。添加库并清理项目
  • 我添加了jar库。在 Android Studio 项目中 build.gradle 文件的依赖项中显示如下 ---> compile files('libs/httpmime-4.5.2.jar')

标签: android http android-asynctask


【解决方案1】:

终于找到原因了。我已经将 httpmime 库导入到项目中。但在我的情况下,它需要另一个库与 httpmime 一起执行。我导入 httpcore 库并构建项目。它解决了问题。 :D 我只是将下面的行添加到 build.gradle 并重新构建项目。

compile 'org.apache.httpcomponents:httpcore:4.4.4' 

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-11-30
    • 1970-01-01
    • 2016-02-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多