【发布时间】:2016-02-08 22:01:40
【问题描述】:
我正在尝试将文件从安卓手机发送到远程服务器。这是我使用的代码:
public void sendFile() {
try {
// HttpClient
HttpClient client = new DefaultHttpClient();
// post header
HttpPost post = new HttpPost("http://example.com/get_data.php");
// add your data
MultipartEntityBuilder builder = MultipartEntityBuilder.create();
builder.setMode(HttpMultipartMode.BROWSER_COMPATIBLE);
File folder = this.mContext.getFilesDir();
File file = new File(folder, "test.txt");
if (file.exists()) {
Log.d(TAG, "File exists : " + folder.listFiles()[0].toString());
}
builder.addPart("file", new FileBody(file));
builder.addBinaryBody("file", file);
HttpEntity entity = builder.build();
post.setEntity(entity);
HttpResponse response = client.execute(post);
HttpEntity Httpentity = response.getEntity();
Log.v("result", EntityUtils.toString(Httpentity));
} catch (Exception e) {
e.printStackTrace();
}
}
这段代码应该是正确的,因为我在这里和那里找到了类似的例子。当我构建 MultipartEntityBuilder 时出现问题:
HttpEntity entity = builder.build();
我收到此错误:
Caused by: java.lang.NoClassDefFoundError: Failed resolution of: Lorg/apache/http/util/Args; at org.apache.http.entity.mime.content.AbstractContentBody.<init>(AbstractContentBody.java:48) at org.apache.http.entity.mime.content.FileBody.<init>(FileBody.java:96) at org.apache.http.entity.mime.MultipartEntityBuilder.addBinaryBody(MultipartEntityBuilder.java:141) at org.apache.http.entity.mime.MultipartEntityBuilder.addBinaryBody(MultipartEntityBuilder.java:146) at com.example.kevin.recordacceleration.Accelerometer.sendFile(Accelerometer.java:149)
我要发送的文件在内存中,我检查它的存在:它存在。
这不是最新版本,因为我在另一个主题上读到这个版本的 httpmime 和 httpclient 应该可以工作
【问题讨论】:
-
你能具体说说为什么不能使用Android自带的Apache HttpClient的默认实现吗?我认为您不能简单地提供自己的 HttpClient 实现并期望它替换平台版本。 (此外,不推荐在 Android 中使用 HttpClient,您应该改用 URLConnection 或其他第三方 HTTP 库,如 OKHTTP。)
标签: android apache-httpcomponents