无法在异步任务中使用MultipartEntityBuilder在android中上载视频文件
我正在尝试使用mime.MultipartEntityBuilder上载视频文件,但我的logcat中出现以下错误无法在异步任务中使用MultipartEntityBuilder在android中上载视频文件,android,android-asynctask,multipartentity,Android,Android Asynctask,Multipartentity,我正在尝试使用mime.MultipartEntityBuilder上载视频文件,但我的logcat中出现以下错误 09-24 14:38:59.673: E/AndroidRuntime(3072): FATAL EXCEPTION: AsyncTask #1 09-24 14:38:59.673: E/AndroidRuntime(3072): java.lang.RuntimeException: An error occured while executing doInBackgroun
09-24 14:38:59.673: E/AndroidRuntime(3072): FATAL EXCEPTION: AsyncTask #1
09-24 14:38:59.673: E/AndroidRuntime(3072): java.lang.RuntimeException: An error occured while executing doInBackground()
09-24 14:38:59.673: E/AndroidRuntime(3072): at android.os.AsyncTask$3.done(AsyncTask.java:299)
09-24 14:38:59.673: E/AndroidRuntime(3072): at java.util.concurrent.FutureTask$Sync.innerSetException(FutureTask.java:273)
09-24 14:38:59.673: E/AndroidRuntime(3072): at java.util.concurrent.FutureTask.setException(FutureTask.java:124)
09-24 14:38:59.673: E/AndroidRuntime(3072): at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:307)
09-24 14:38:59.673: E/AndroidRuntime(3072): at java.util.concurrent.FutureTask.run(FutureTask.java:137)
09-24 14:38:59.673: E/AndroidRuntime(3072): at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:230)
09-24 14:38:59.673: E/AndroidRuntime(3072): at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1076)
09-24 14:38:59.673: E/AndroidRuntime(3072): at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:569)
09-24 14:38:59.673: E/AndroidRuntime(3072): at java.lang.Thread.run(Thread.java:856)
09-24 14:38:59.673: E/AndroidRuntime(3072): Caused by: java.lang.NoClassDefFoundError: org.apache.http.entity.ContentType
09-24 14:38:59.673: E/AndroidRuntime(3072): at org.apache.http.entity.mime.content.FileBody.<init>(FileBody.java:89)
09-24 14:38:59.673: E/AndroidRuntime(3072): at a.today.a.async.UploadVideoAsync.doInBackground(UploadVideoAsync.java:53)
09-24 14:38:59.673: E/AndroidRuntime(3072): at a.today.a.async.UploadVideoAsync.doInBackground(UploadVideoAsync.java:1)
09-24 14:38:59.673: E/AndroidRuntime(3072): at android.os.AsyncTask$2.call(AsyncTask.java:287)
09-24 14:38:59.673: E/AndroidRuntime(3072): at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:305)
09-24 14:38:59.673: E/AndroidRuntime(3072): ... 5 more
09-2414:38:59.673:E/AndroidRuntime(3072):致命异常:AsyncTask#1
09-24 14:38:59.673:E/AndroidRuntime(3072):java.lang.RuntimeException:执行doInBackground()时出错
09-24 14:38:59.673:E/AndroidRuntime(3072):在android.os.AsyncTask$3.done(AsyncTask.java:299)
09-24 14:38:59.673:E/AndroidRuntime(3072):在java.util.concurrent.FutureTask$Sync.innerSetException(FutureTask.java:273)
09-24 14:38:59.673:E/AndroidRuntime(3072):在java.util.concurrent.FutureTask.setException(FutureTask.java:124)
09-24 14:38:59.673:E/AndroidRuntime(3072):在java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:307)
09-24 14:38:59.673:E/AndroidRuntime(3072):在java.util.concurrent.FutureTask.run(FutureTask.java:137)
09-24 14:38:59.673:E/AndroidRuntime(3072):在android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:230)
09-24 14:38:59.673:E/AndroidRuntime(3072):位于java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1076)
09-24 14:38:59.673:E/AndroidRuntime(3072):位于java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:569)
09-24 14:38:59.673:E/AndroidRuntime(3072):在java.lang.Thread.run(Thread.java:856)
09-24 14:38:59.673:E/AndroidRuntime(3072):由以下原因引起:java.lang.NoClassDefFoundError:org.apache.http.entity.ContentType
09-24 14:38:59.673:E/AndroidRuntime(3072):位于org.apache.http.entity.mime.content.FileBody.(FileBody.java:89)
09-24 14:38:59.673:E/AndroidRuntime(3072):在a.today.a.async.UploadVideoAsync.doInBackground(UploadVideoAsync.java:53)
09-24 14:38:59.673:E/AndroidRuntime(3072):在a.today.a.async.UploadVideoAsync.doInBackground(UploadVideoAsync.java:1)
09-24 14:38:59.673:E/AndroidRuntime(3072):在android.os.AsyncTask$2.call(AsyncTask.java:287)
09-24 14:38:59.673:E/AndroidRuntime(3072):在java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:305)
09-2414:38:59.673:E/AndroidRuntime(3072):。。。还有5个
这是我的代码库:
import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.HttpClient;
import org.apache.http.util.EntityUtils;
import org.apache.http.entity.mime.HttpMultipartMode;
import org.apache.http.entity.mime.MultipartEntityBuilder;
import org.apache.http.entity.ContentType;
import org.apache.http.entity.mime.content.ContentBody;
import org.apache.http.entity.mime.content.FileBody;
import android.os.AsyncTask;
import android.util.Log;
public class UploadVideoAsync extends AsyncTask<String, String, Object[]> {
@Override
protected Object[] doInBackground(String... params) {
HttpClient httpclient = new DefaultHttpClient();
HttpPost httppost = new HttpPost(params[0].toString());
final File video = new File(params[1].toString());
//String video = params[1].toString();
ContentBody cb = new FileBody(video);
try{
MultipartEntityBuilder entityBuilder = MultipartEntityBuilder.create();
entityBuilder.setMode(HttpMultipartMode.BROWSER_COMPATIBLE);
//entityBuilder.addPart("video", cb);
entityBuilder.addBinaryBody("video", video);
entityBuilder.addTextBody("sid", params[2].toString());
HttpEntity entity = entityBuilder.build();
httppost.setEntity(entity);
HttpResponse response = httpclient.execute(httppost);
HttpEntity httpEntity = response.getEntity();
Log.v("result", EntityUtils.toString(httpEntity));
return new Object[]{response, new BasicResponseHandler().handleResponse(response)};
}catch (ClientProtocolException e) {
e.printStackTrace();
}
return new Object[0];
}
}
import org.apache.http.HttpEntity;
导入org.apache.http.HttpResponse;
导入org.apache.http.client.ClientProtocolException;
导入org.apache.http.client.HttpClient;
导入org.apache.http.util.EntityUtils;
导入org.apache.http.entity.mime.HttpMultipartMode;
导入org.apache.http.entity.mime.MultipartEntityBuilder;
导入org.apache.http.entity.ContentType;
导入org.apache.http.entity.mime.content.ContentBody;
导入org.apache.http.entity.mime.content.FileBody;
导入android.os.AsyncTask;
导入android.util.Log;
公共类UploadVideoAsync扩展异步任务{
@凌驾
受保护对象[]doInBackground(字符串…参数){
HttpClient HttpClient=新的DefaultHttpClient();
HttpPost HttpPost=新的HttpPost(参数[0].toString());
最终文件视频=新文件(参数[1].toString());
//字符串video=params[1].toString();
ContentBody cb=新文件体(视频);
试一试{
MultipartEntityBuilder entityBuilder=MultipartEntityBuilder.create();
entityBuilder.setMode(与HttpMultipartMode.BROWSER_兼容);
//entityBuilder.addPart(“视频”,cb);
addBinaryBody(“视频”,视频);
entityBuilder.addTextBody(“sid”,参数[2].toString());
HttpEntity=entityBuilder.build();
httppost.setEntity(实体);
HttpResponse response=httpclient.execute(httppost);
HttpEntity HttpEntity=response.getEntity();
Log.v(“result”,EntityUtils.toString(httpEntity));
返回新对象[]{response,new BasicResponseHandler().HandlerResponse(response)};
}捕获(客户端协议例外e){
e、 printStackTrace();
}
返回新对象[0];
}
}
我找不到确切的问题。有人能说出代码出了什么问题吗 好的,这个解决了问题: 项目->属性->Java构建路径->订单和导出->检查 jar文件->确定 这是屏幕截图:
问题此处执行doInBackground()时发生错误。在doInBackground进程中是的,我知道它在doInBackground中,问题发生在entityBuilder.addBinaryBody(“video”,video);线,但到底是什么引起的呢?Logcat说:由以下原因引起:java.lang.NoClassDefFoundError:org.apache.http.entity.ContentType,但我已在其中导入ContentType。
NoClassDefFoundError
此异常表示JVM在其内部类定义数据结构中查找了类的定义,但未找到itI已导入的导入org.apache.http.entity.ContentType;但由于某些原因,它显示未使用。