Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/wix/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
带Android的Apache Commons编解码器:找不到方法_Android_Base64_Apache Commons Codec - Fatal编程技术网

带Android的Apache Commons编解码器:找不到方法

带Android的Apache Commons编解码器:找不到方法,android,base64,apache-commons-codec,Android,Base64,Apache Commons Codec,今天,我尝试将apache.commons.codec包包含在我的Android应用程序中,但无法运行。Android找不到方法ord.apache.commons.codec.binary.*并在DDMS中输出以下错误 01-12 08:41:48.161:错误/dalvikvm(457):找不到方法org.apache.commons.codec.binary.Base64.encodeBase64URLSafeString,从方法com.dqminh.app.util.util.sendR

今天,我尝试将apache.commons.codec包包含在我的Android应用程序中,但无法运行。Android找不到方法ord.apache.commons.codec.binary.*并在DDMS中输出以下错误

01-12 08:41:48.161:错误/dalvikvm(457):找不到方法org.apache.commons.codec.binary.Base64.encodeBase64URLSafeString,从方法com.dqminh.app.util.util.sendRequest引用

01-12 08:41:48.161:WARN/dalvikvm(457):VFY:无法解析静态方法10146:Lorg/apache/commons/codec/binary/Base64;。encodeBase64URLSafeString([B)Ljava/lang/String

01-12 08:41:48.161:WARN/dalvikvm(457):VFY:在0x0004处拒绝操作码0x71


关于如何解决这个问题有什么线索吗?非常感谢。

我在使用android时遇到了一个类似的问题,我正在开发

我还从android获得了这样的信息,尽管我在类路径中包含了
apache.commons.codec
,但没有找到特定的方法(
encodeBase64String

查看javadocs,这两种方法都声称只有1.4和更高版本,因此我猜测android已经包含了较旧版本的
commons.codec
,其中这些方法确实没有定义

我的解决方案是使用一种较旧的方法,如:

String encodedString = new String(Base64.encodeBase64('string to encode'));
您要使用的方法有所不同,因为它将+和/替换为url安全值-和u。因此,您可能会使用以下方法:

String encodedString = new String(Base64.encodeBase64('string to encode'));
String safeString = encodedString.replace('+','-').replace('/','_');

希望有帮助!

我遇到了完全相同的问题。因此我开始浏览android源代码,结果发现Pablo Fernandez关于android实现org.apache.commons.code.binary的猜测是正确的。但是,它的apache commons版本是1.2,而不是1.4甚至1.5。 你可以在android中看到自己


需要注意的是,这个问题是

的一个副本,您只需从apache库中复制这个代码位(它是非常独立的)

编辑: 当原始链接消失时,从回程机器更新链接:

我对同一问题的解决方案是将有问题的类
org.apache.commons.codec.binary.Base64.java
重命名为
org.apache.commons.codec.binary.ApacheBase64.java
。我使用Eclipse重构重命名

这样,最新和最伟大的apache解决方案就得以保留和使用,当我的应用程序最终从android 1.6最低分母中升级时,就不会出现意外问题


注意,我已经将整个apache commons源代码树设置为单独的Eclipse java项目,与我的Android项目相邻。我的Android项目使用了许多apache commons类,但由于上述问题,在Base64上失败了…

您不必使用apache commons,在Android上您可以使用它。

请注意,这是一个swer是在上述评论中做出的:


请注意,您需要使用Base64.encode(“foobar”.getBytes(), Base64.Base64.NO_WRAP);以获得与apache完全相同的结果 公共图书馆。见:stackoverflow.com/questions/17912119

这个答案是我在数小时试图用java“桌面”应用程序与android应用程序通信后唯一有效的答案

下面是一些源代码,可能会对其他人有所帮助:

来自桌面小程序的代码:

   private static String convertToBase64(String s) {
        byte[] bytes = new byte[0];
        try {
            bytes = (s.getBytes());
        } catch (Exception e) {
            e.printStackTrace();
        }
        return DatatypeConverter.printBase64Binary(bytes);
    }
 public static String convertToBase64(String password) {

        byte[] bPwd = new byte[0];
        try {
            bPwd = (password.getBytes("UTF-8"));
        } catch (Exception e) {
            e.printStackTrace();
        }
        try {
            password = new String(Base64.encode(bPwd, Base64.NO_WRAP), "UTF-8");
        } catch (UnsupportedEncodingException e) {
            e.printStackTrace();
        }
        return password;
    }
此代码段用于android应用程序中:

   private static String convertToBase64(String s) {
        byte[] bytes = new byte[0];
        try {
            bytes = (s.getBytes());
        } catch (Exception e) {
            e.printStackTrace();
        }
        return DatatypeConverter.printBase64Binary(bytes);
    }
 public static String convertToBase64(String password) {

        byte[] bPwd = new byte[0];
        try {
            bPwd = (password.getBytes("UTF-8"));
        } catch (Exception e) {
            e.printStackTrace();
        }
        try {
            password = new String(Base64.encode(bPwd, Base64.NO_WRAP), "UTF-8");
        } catch (UnsupportedEncodingException e) {
            e.printStackTrace();
        }
        return password;
    }

您可以使用以下功能:

private static String encodeBase64URLSafeString(byte[] binaryData) {

        return android.util.Base64.encodeToString(binaryData, Base64.URL_SAFE);

    }

source+其他可能标志的列表:

是否包括apache commons项目库,如

org.apache.commons:commons-compress
org.apache.commons:commons-email
org.apache.commons:commons-io
org.apache.commons:commons-lang3
org.apache.commons:commons-parent
org.apache.commons:commons-pool2
commons编解码器的GAV是

commons-codec:commons-codec 
但它的包名是

org.apache.commons.codec

此包名将与apache commons项目libs冲突,请尝试更改commons codec的包名,然后将其生成为jar或导入已更改包名的源代码;

知道这是一个老问题,但我最近在为API级别23编译时遇到了此问题,并发现了另一个问题问题的解决方法:使用番石榴项目

guava库(18.0)是我使用过的版本,更改很顺利。代码按预期工作

在这里可以找到解决方案:

这对我很有用:

import org.apache.commons.codec.binary.Base64;

/**
 * This is used to get the base64 from the bytes
 *
 * @param rawBytes the raw bytes
 * @return the base64 encoded string
 */
public static String getBase64String(byte[] rawBytes) {
    String base64Str = "";
    if (rawBytes!= null) {
        base64Str= new String(Base64.encodeBase64(rawBytes));
    }
    return base64Str;
}

public static byte[] getBase64DecodedString(String base64EncodedStr) {
    byte[] base64Bytes = Base64.decodeBase64(base64EncodedStr.getBytes());
    return bitmap;
}

你有没有apache.commons.codec中的任何类在工作?那么,仅仅这个类是一个特殊的问题,还是你认为没有一个类可用?我已经为此挣扎了两天了!不过,这只是一个问题,如果我要替换+和-我将如何进行解码?如果原始编码的string(在替换之前)已经包含+和-我想这没关系,您可以像上面的示例一样使用,但需要API级别8(2.2.x)。如果您使用的库依赖于Commons-Codec,则不起作用。请注意,您需要使用
Base64.encode(“foobar.getBytes(),Base64.Base64.NO_-WRAP);
以获得与apache commons库完全相同的结果。请参阅:@DylanWatson:非常感谢!!!我没有设置“NO_WRAP”,这导致了android java和我正在编程的“桌面”java应用程序的通信出现问题。谢谢!!“源”的链接是坏的。你能解决这个问题吗?我和哈希有着完全相同的问题,并且能够以类似的方式解决它(我实际上重构了整个编解码器库的包名)。这对我帮助很大。特别是在使用aws签名生成java类“SignedRequestsHelper”对url进行签名时,该url使用“org.apache.commons.Codec.binary.Base64”但是在安卓系统中,我们必须使用“android.util.Base64”来代替“Base64编码器=新Base64();签名=新字符串(encoder.encode(rawHmac));”和“签名=新字符串(Base64.encode(rawHmac,Base64.NO_WRAP),“UTF-8”);”来让它工作起来。详细的评论是给未来的求助者的。希望它能帮助其他人。谢谢。。。。。