【问题标题】:Apache Commons IO on AndroidAndroid 上的 Apache Commons IO
【发布时间】:2013-06-25 21:35:39
【问题描述】:

我正在开发一个使用 Apache Commons IOcommons-io-2.4-bin.tar.gz 的 Android 应用程序。

我得到了一些错误,其中之一:

Could not find method java.lang.String.getBytes, referenced from method org.apache.commons.io.IOUtils.toInputStream

我想我不必担心,不是吗?

我可以使用其他特定的 Android 库来代替 Apache Commons IO 吗?

我在这里使用它:

import java.io.IOException;
import java.util.HashMap;
import java.util.Map;

import org.apache.commons.io.IOUtils;
import org.springframework.http.client.ClientHttpResponse;
import org.springframework.web.client.DefaultResponseErrorHandler;
import org.springframework.web.client.ResponseErrorHandler;

import android.util.Log;

public class CustomResponseErrorHandler implements ResponseErrorHandler
{

    private ResponseErrorHandler errorHandler = new DefaultResponseErrorHandler();

    @Override
    public void handleError(ClientHttpResponse response) throws IOException
    {
        String theString = IOUtils.toString(response.getBody());
        Log.v("Error Handler", theString);
        CustomException exception = new CustomException();
        Map<String, Object> properties = new HashMap<String, Object>();
        properties.put("code", response.getStatusCode().toString());
        properties.put("body", theString);
        properties.put("header", response.getHeaders());
        exception.setProperties(properties);

        throw exception;
    }

    @Override
    public boolean hasError(ClientHttpResponse response) throws IOException
    {
        return errorHandler.hasError(response);
    }

}

在这一行:

String theString = IOUtils.toString(response.getBody());

【问题讨论】:

    标签: java android apache-commons


    【解决方案1】:

    我建议使用 Apache Commons IO 库源,然后将其打包到 Android :) 我已将其打包在一个 repo here 中。只需将其导入您选择的 IDE!

    【讨论】:

      【解决方案2】:

      Guava 可能是您的理想替代品。 Their wiki 声称它们与 Android 完全兼容:

      Guava 11.0.2 及更早版本与 Android 完全兼容,但最新的 Guava 版本可能需要更新的 Android 版本。特别是在 Java 6 中添加的 NavigableSet 和其他扩展(由 Guava 12 及更高版本使用)在 Android API 版本 9 中添加,对应于 Gingerbread。

      (建议关注 Guava 的大 JAR 大小的 Android 程序员使用 ProGuard 仅获取他们需要的 Guava 部分。Guava 是 Android 应用程序最常见的依赖项之一。)

      对于 IOUtils.toString() 的番石榴等价物,请检查以下问题:Guava equivalent for IOUtils.toString(InputStream)

      【讨论】:

      • 感谢您的回答。如何使用 ProGuard 仅获取我需要的 Guava 部分?
      • @VansFannel:它记录在 wiki 页面上:UsingProGuardWithGuava,如果您想了解更多信息,我认为最好打开一个新问题。
      猜你喜欢
      • 2019-05-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-01-04
      • 2018-06-23
      • 1970-01-01
      相关资源
      最近更新 更多