天天看点

Android Studio 引入JSONObject 以及其依赖包的那些坑 JAVA

我用Android Studio开发app,自己写接口,需要使用json,于是涉及到Json的使用,然而在使用过程中也踩到了不少坑。

1、JSONObject 包的引用。

一种是:

import org.json.JSONObject;
           

但是引用之后,发现网上有的代码为

JSONObject.fromObject(result);
           

而这个包里是没有fromObject以及一些其他方法的。

后来上网去查找,发现他们用的是另外一个包。下面讲的主要是这个包

我们使用的是

import net.sf.json.JSONObject;
           

这个需要依赖以下的几个包:

commons-beanutils-1.8.0.jar、commons-collections、commons-lang-2.4、commons-logging-1.1、ezmorph-1.0.4、json-lib-2.3-jdk15

都需要添加到Android Studio的 Lib中,一个都不能少。

接下来我去网上下载了几个版本的jar包,那些

Android Studio 引入JSONObject 以及其依赖包的那些坑 JAVA

2、问题一:一口气将这几个包同时复制到lib目录中,然后“add as library”,编译后发现某些包有问题,编译不同。(问题没有截图)

后来定位到项目中的目录,发现有个别jar包居然为0kb!坑爹,删除后重新复制一遍进去。解决问题。

3、我原本在网上下载的某个包为:commons-beanutils-1.8.0.jar

再添加进去的时候,编译报错。

Duplicate class org.apache.commons.collections.ArrayStack found in modules commons-beanutils-1.8.0.jar (commons-beanutils-1.8.0.jar) and commons-collections.jar (commons-collections.jar)

大意是org.apache.commons.collections.ArrayStack这个方法在 (commons-collections.jar)和(commons-beanutils-1.8.0.jar)中重复了。

于是试着把commons-beanutils-1.8.0.jar给删除了,程序就能运行不报错了。如执行以下代码都没有问题

JSONObject json = new JSONObject();
json.put("userName", userName);
json.put("password", password);
           

但是在执行到这个操作的时候,又报错了。

JSONObject jsonObject = JSONObject.fromObject(result);
boolean isError = jsonObject.getBoolean("successs");
           

错误为:

java.lang.NoClassDefFoundError: Failed resolution of: Lorg/apache/commons/beanutils/DynaBean;

到此,看到“beanutils”,我是明白了,因为我刚刚删除了commons-beanutils-1.8.0.jar的原因。

看来那几个依赖包,一个都不能少!

那之所以之前没删除之前,仍旧出现编译错误的原因,就只可能是依赖包的版本不一致了!

下载的时候说“(完整直接可用版)”和“所需全部JAR包”都是骗人的!!我那个伤心啊!折腾了那么久。

于是我意外发现了 commons-beanutils的官网,抱着试试的态度,下载了最新版的commons-beanutils-1.9.3.jar。引入项目后,完美解决!!!

我那个泪流满面啊!

以下为自己整理的JSONObject以及其依赖包的下载地址:

java json依赖包下载