Inconsistent behavior between Java and Android -
i'm using shared library in both android
, java
, have found inconsistency on behavior.
the library depends on org.json.jsonobject
. in jar contained on library itself, seems somehow android overrides jar own implementation of json.
when do:
double = 0.1; jsonobject b = new jsonobject(); b.put("hola", a); flocksonversionstring = b.getstring("hola");
in android
, runs no problems, in java
, throws exception because 0.1 not string. second behavior 1 expected beginning.
when do
object aobj = b.get("hola"); if(aobj instanceof float){ system.out.println("hola float"); } else if (aobj instanceof long){ system.out.println("hola long"); } else if (aobj instanceof double){ system.out.println("hola double"); } else if (aobj instanceof string){ system.out.println("hola string"); } else { system.out.println("hola has unknown type"); }
both in android
, java
hola double
.
the curious thing that, if go source code of org.json.jsonobject
getstring()
method declared follows:
public string getstring(string key) throws jsonexception { object object = get(key); if (object instanceof string) { return (string)object; } throw new jsonexception("jsonobject[" + quote(key) + "] not string."); }
which seems totally expected behavior because it's checking if object
string
, throwing exception if isn't.
any idea why happening?
thank you!
(i can't change dependency on org.json.jsonobject
since break compatibility between android
, java
)
are sure using same jar in both projects?
android's org.json.jsonobject.tostring(string)
different:
/** * returns value mapped {@code name} if exists, coercing if * necessary, or throws if no such mapping exists. * * @throws jsonexception if no such mapping exists. */ public string getstring(string name) throws jsonexception { object object = get(name); string result = json.tostring(object); if (result == null) { throw json.typemismatch(name, object, "string"); } return result; }
json.tostring(object)
:
static string tostring(object value) { if (value instanceof string) { return (string) value; } else if (value != null) { return string.valueof(value); } return null; }
in case not throw exception on android.
Comments
Post a Comment