【问题标题】:Send text file to distant server in Android在Android中将文本文件发送到远程服务器
【发布时间】: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


【解决方案1】:

您的应用缺少 HttpCore 和 HttpClient 所依赖的 commons-codec 和 commons-logging。 Httpmime 依赖于 HttpClient。

【讨论】:

    猜你喜欢
    • 2021-07-06
    • 2013-11-18
    • 1970-01-01
    • 1970-01-01
    • 2016-11-25
    • 1970-01-01
    • 1970-01-01
    • 2021-12-27
    • 2015-12-24
    相关资源
    最近更新 更多