java.lang.NoSuchMethodError saving SimpleDatabase on Android
When I save the SimpleDatabase
val basePath = ContextWrapper(context).filesDir
val credentials = KdbxCreds(credentials.toByteArray())
val db = secureDatabase ?: return
FileOutputStream("$basePath${File.separator}$database.kdbx").use { outputStream ->
db.save(credentials, outputStream)
}
I get this error:
java.lang.NoSuchMethodError: No static method encodeBase64String([B)Ljava/lang/String; in class Lorg/apache/commons/codec/binary/Base64; or its super classes (declaration of 'org.apache.commons.codec.binary.Base64' appears in /system/framework/org.apache.http.legacy.boot.jar)
at org.linguafranca.pwdb.kdbx.Helpers.encodeBase64Content(Helpers.java:119)
at org.linguafranca.pwdb.kdbx.simple.converter.Base64ByteArrayConverter.write(Base64ByteArrayConverter.java:38)
at org.linguafranca.pwdb.kdbx.simple.converter.Base64ByteArrayConverter.write(Base64ByteArrayConverter.java:28)
at org.simpleframework.xml.convert.AnnotationStrategy.write(AnnotationStrategy.java:180)
at org.simpleframework.xml.convert.AnnotationStrategy.write(AnnotationStrategy.java:156)
at org.simpleframework.xml.core.Source.setOverride(Source.java:384)
at org.simpleframework.xml.core.Factory.setOverride(Factory.java:170)
at org.simpleframework.xml.core.Composite.isOverridden(Composite.java:1312)
at org.simpleframework.xml.core.Composite.writeElement(Composite.java:1234)
at org.simpleframework.xml.core.Composite.writeUnion(Composite.java:1127)
at org.simpleframework.xml.core.Composite.writeElements(Composite.java:1098)
at org.simpleframework.xml.core.Composite.writeSection(Composite.java:1004)
at org.simpleframework.xml.core.Composite.write(Composite.java:975)
at org.simpleframework.xml.core.Composite.write(Composite.java:952)
at org.simpleframework.xml.core.Composite.writeElement(Composite.java:1256)
at org.simpleframework.xml.core.Composite.writeElement(Composite.java:1239)
at org.simpleframework.xml.core.Composite.writeUnion(Composite.java:1127)
at org.simpleframework.xml.core.Composite.writeElements(Composite.java:1098)
at org.simpleframework.xml.core.Composite.writeSection(Composite.java:1004)
at org.simpleframework.xml.core.Composite.write(Composite.java:975)
at org.simpleframework.xml.core.Composite.write(Composite.java:952)
at org.simpleframework.xml.core.Traverser.write(Traverser.java:236)
at org.simpleframework.xml.core.Traverser.write(Traverser.java:208)
at org.simpleframework.xml.core.Traverser.write(Traverser.java:186)
at org.simpleframework.xml.core.Persister.write(Persister.java:1180)
at org.simpleframework.xml.core.Persister.write(Persister.java:1162)
at org.simpleframework.xml.core.Persister.write(Persister.java:1140)
at org.simpleframework.xml.core.Persister.write(Persister.java:1259)
at org.simpleframework.xml.core.Persister.write(Persister.java:1241)
at org.simpleframework.xml.core.Persister.write(Persister.java:1222)
at org.linguafranca.pwdb.kdbx.simple.SimpleDatabase.save(SimpleDatabase.java:236)
...
any suggestion?
Is this project still alive?
sure, why do you ask?
You are picking up Base64 from /system/framework/org.apache.http.legacy.boot.jar rather than commons-codec.1.11.jar - you'll need to find a way to exclude the first from your classpath
Please include in your build.gradle following reference to base64 support:
implementation group: 'commons-codec', name: 'commons-codec', version:'1.10'
Thanks Pavel - NB it's 1.11
sure, why do you ask?
I haven't see commits since 2018 ... sorry.
Please include in your build.gradle following reference to base64 support:
implementation group: 'commons-codec', name: 'commons-codec', version:'1.10'
I tried but the error persists ... trying resetting AndroidStudio cache... Nope. It doesn't work.
Workable example for Android is here
Though it's a bit outdated, but still usable
I'm not able to open it in AndroidStudio ... Have you used Eclipse?
Coming back to review, this still looks as though there are multiple JARs on the classpath and that an out of date version is being picked up - see earlier comment - I will close unless there is more discussion needed.