51 votes

Codec Apache Commons avec Android: méthode introuvable

Aujourd'hui, j'ai essayé, y compris de apache.commons.codec package dans mon application Android et je ne pouvais pas essayer de le faire fonctionner. Android ne pouvait pas trouver la méthode de l'ord.apache.commons.codec.binaires.* et de sortie les erreurs suivantes dans DDMS

01-12 08:41:48.161: ERREUR/dalvikvm(457): impossible de trouver la méthode de org.apache.commons.codec.binaires.Base64.encodeBase64URLSafeString, référencé à partir de la méthode com.dqminh.app.util.Util.sendRequest

01-12 08:41:48.161: ALERTER/dalvikvm(457): VFY: impossible de résoudre méthode statique 10146: Lorg/apache/commons/codec/binaire/Base64;.encodeBase64URLSafeString ([B)Ljava/lang/String;

01-12 08:41:48.161: ALERTER/dalvikvm(457): VFY: rejet de l'opcode 0x71 à 0x0004

Aucune idée sur comment résoudre ce problème ? Merci beaucoup.

62voto

Pablo Fernandez Points 32003

J'ai eu un problème similaire lors de l'utilisation d'android avec un OAuth bibliothèque , je suis en développement.

J'ai également obtenu à partir d'android que, même si je l'avais inclus apache.commons.codec dans le chemin de classe, une méthode particulière (encodeBase64String) n'a pas été trouvé.

La vérification de la documentation javadoc, les deux méthodes prétendent être de 1,4 et de plus seulement, si ma conjecture est que android comprend déjà une version plus ancienne d' commons.codec lorsque ces méthodes sont en effet pas défini.

Ma solution a été d'utiliser une méthode plus ancienne, comme ceci:

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

La méthode que vous souhaitez utiliser est différent puisqu'il remplace + et de / url-les valeurs sûres - et _. Donc, vous avez probablement vous pouvez utiliser quelque chose comme:

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

Espérons que ça aide!

17voto

Mootaz Dinana Points 61

Vous n'avez pas besoin d'utiliser Apache Commons, sur Android, vous pouvez utiliser android.util.Base64 à la place.

13voto

zarthross Points 408

J'ai connu exactement le même problème. J'ai donc commencé à la navigation sur le code source android, et il s'avère que Pablo Fernandez deviner sur Android avoir une mise en œuvre de org.apache.commons.code.binaire est correct. Toutefois, sa version 1.2 d'apache commons, pas la version 1.4 ou même 1.5. Vous pouvez voir par vous-même dans l'android source.

comme une note à cette question est un doublon de ce post

5voto

Vous pouvez simplement copier ce code bits à partir de la bibliothèque apache (il est assez isolé) http://www.java2s.com/Open-Source/Android/Blog-Twitter/twitspeak/org/apache/commons/codec/binary/Base64.java.htm

Edit: Mise à jour du lien de la Wayback Machine que l'original a disparu: http://web.archive.org/web/20130610025148/http://www.java2s.com/Open-Source/Android/Blog-Twitter/twitspeak/org/apache/commons/codec/binary/Base64.java.htm

5voto

R. Simac Points 76

Ma solution pour le même problème a été de renommer la problématique de la classe org.apache.commons.codec.binary.Base64.java en org.apache.commons.codec.binary.ApacheBase64.java. Je l'ai fait à l'aide d'Eclipse refactor-renommer.

De cette façon, la dernière et la plus grande apache solution est conservée et utilisée, et il n'y a aucune chance en cas de problème de récidive lorsque mon appli est finalement levée à partir d'android 1.6 plus bas dénominateur.

Remarque, j'ai eu l'ensemble de apache commons arborescence des sources déjà séparé Eclipse java projet, à côté de mon projet Android. Mon projet Android utilisé beaucoup de Apache Commons classes, mais a échoué sur Base64 en raison de problèmes décrits ci-dessus...

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X