今天我试图包括apache.共用。解码包在我的机器应用程序和不能让它运行。安卓不能找到方法ord。apache.共用。编解码器。二.* 出以下错误DDMS

01-12 08:41:48.161:错误/dalvikvm(457):找不到方法组织。apache.共用。编解码器。二进制的。Base64.encodeBase64URLSafeString,引用从方法com.dqminh.应用程序。工具.工具.sendRequest

01-12 08:41:48.161:警告/dalvikvm(457):VFY:无法解决的静态的方法10146:Lorg/apache/commons/编/binary/Base64;.encodeBase64URLSafeString([B)Ljava/lang/串;

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

任何线索就如何解决这个问题?非常感谢。

有帮助吗?

解决方案

我同时使用机器人与 我正在开发的OAuth库也有类似的问题。

我也从机器人得到的是,虽然我已经包含在类路径apache.commons.codec,特定的方法(encodeBase64String)没有被发现。

检查的javadoc,两种方法都声称自己是 1.4,只有更大,所以我的猜测是,机器人已经包括旧版本commons.codec的地方,这些方法的确是不确定的。

我的解决办法是使用较旧的方法,如下所示:

String encodedString = new String(Base64.encodeBase64('string to encode'));

您要使用的方法是不同的,因为它取代+和/网址为安全值 - 和_。所以,你可能会使用这样的:

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

希望帮助!

其他提示

您不必使用Apache的百科全书,在Android上可以使用 android.util.Base64 代替。

我所经历的相同问题。于是我开始浏览Android源代码,并且事实证明巴勃罗·费尔南德斯的关于有org.apache.commons.code.binary的实现Android的猜测是正确的。然而,它的apache的公地的1.2版本,而不是1.4版甚至1.5。 你可以看到在Android的

作注,这是问题是的重复这个帖子

可以使用下面的函数:

private static String encodeBase64URLSafeString(byte[] binaryData) {

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

    }

的其他可能的标记源+列表: http://developer.android.com/reference/android /util/Base64.html

我到同样的问题的解决办法是重命名问题类org.apache.commons.codec.binary.Base64.javaorg.apache.commons.codec.binary.ApacheBase64.java。我使用Eclipse重构-重命名它没有。

这样的话,最新和最伟大的Apache液保存和使用,并且没有机会意外问题时复发我的应用程序最终被从Android 1.6的最低分母解除。

请注意我已经设置为独立的Eclipse Java项目整个阿帕奇百科全书源代码树,我旁边的Android项目。我的Android项目中使用的许多Apache的百科全书类的,但失败了的Base64由于上述问题...

请注意,这个答案是由迪伦沃森在上述意见中提出:

  

请注意,您需要使用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);
    }

此代码段在 Android应用中使用

 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;
    }

是否包含阿帕奇百科全书项目的lib,就像

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

公地编解码器的GAV是

commons-codec:commons-codec 

但它是包名是

org.apache.commons.codec

此包的名称将是与Apache Commons项目库冲突,尝试改变公地编解码器的包名称,然后生成它作为一个罐子或导入源代码已经改变包名;

知道这是一个老问题,但我编译的API级别的 23 :当最近面临这个问题,并找到了问题的另一种解决方案:使用的番石榴的项目。

// Encoding
String encodedString = BaseEncoding.base64().encode(text.getBytes(UTF_8));
System.out.println("encodedString: " + encodedString);

// Decoding
byte[] decodedString = BaseEncoding.base64().decode(encodedString);
System.out.println("decodedString: " + new String(decodedString, UTF_8));

在番石榴库(的 18.0 )是,我已经使用的版本,并且变化是平滑的。该代码按预期方式工作。

在这里找到

解决方案: https://memorynotfound.com /编码 - 解码 - 的base64字符串使用天然的Java /

这对我的作品:

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;
}
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top